2011-08-05 5 views
1

나는 this 기사에서 다음 SQL을 변환 할 수 있습니다 방법 :엔티티에 LINQ에 SQL 변환

ctx.Fruits. 
Where(f => f.Price == ctx.CreateObjectSet<Fruit>(). 
Where(f1 => f1.Type == f.Type).Min(f1 => f1.Price)); 

있지만 ctx.CreateObjectSet 때문에 작동하지 않습니다 : 나는이 방법을 시도

select type, variety, price 
from fruits 
where price = (select min(price) from fruits as f where f.type = fruits.type) 

SQL로 변환 할 수 없습니다.

답변

2

왜 그냥

ctx.Fruits. 
Where(f => f.Price == ctx.Fruits. 
Where(f1 => f1.Type == f.Type).Min(f1 => f1.Price)); 
+0

나에게 수치! 당신 말이 맞아요. 방금 JoinObject에 대한이 CreateObjectSet 구문을 사용하여 여기서는 작동하지 않습니다. – SiberianGuy

1

마이클 Sagalovich의 대답은 주어진 SQL에 대한 올바른 하나이지만, 같은 유형의 여러 과일 같은 최저 가격이있는 경우, 당신은 여러 항목을 얻을 것이다 알고 있어야 그 타입.

이 더있을 수 있습니다 당신을 위해 무엇을거야 : 당신은 과일에 의해 ORDERBY 가격, 그룹으로 표현하면

ctx.Fruits.GroupBy(f => f.Type) 
    .Select(g => g.OrderBy(f => f.Price).FirstOrDefault()) 
+1

그게 내가 시작한 것입니다.하지만 불행히도 내 EF 공급자 (MySQL .NET 커넥터)는 이러한 종류의 쿼리를 지원하지 않습니다. – SiberianGuy

1

가 명확하고 쉽게 될 수 있습니다 각 유형의 단 하나의 작은 선정한 저렴한 과일을 잡아 .type을 입력하고 각 그룹의 첫 번째 과일을 '선택'하십시오. 그리고 GroupBy는 순서를 유지하기 때문에 읽기 쉬운 방법 (또는 중요하다면 성능에 따라)에 따라 먼저 정렬 (또는 둘째)을 수행 할 수 있습니다.