1
는 EF4 다음과 같은 모델을 가정 할 수 있습니다 :계획 EF4는
class Order
{
....
public int Id {get;private set;}
//ICollection is the root of all evil here
public ICollection<OrderDetail> Details {get;private set;}
}
을 내가 할 수있는 다음 Linq에이 구조를 통해 프로젝트 :
var IdAndCount = context
.Orders
.Select (o => new {
Id = o.Id,
Count = o.Details.Where(d => d.Foo > 0).Count()});
지금까지 너무 좋아,이 완벽하게 될 것입니다 SQL로 변환되었습니다. 나는이 쿼리의 where 절 술어를 추출 할 경우 어떤 문제에 이제
:Func<OrderDetail,bool> detailPredicate = d => d.Foo > 0;
var IdAndCount = context
.Orders
.Select (o => new {
Id = o.Id,
Count = o.Details
.Where(detailPredicate)
.Count()});
이 컴파일하지만 SQL의 술어를 번역하는 EF4에 대한 방법이 없기 때문에 런타임에 실패 표현식이 아닌 Func이기 때문입니다.
세부 정보가 ICollection이므로 IEnumerable "Where"에 대한 OrderDetails 링크의 ".Where"링크 때문에 Expression<Func<OrderDetail,bool>>
으로 변경하면 작동하지 않습니다.
따라서 트래버스 된 속성이 IEnumerable 또는 similair 인 경우 더 큰 Linq 쿼리의 일부를 추출 할 수 있습니까?
이 OrderDetails의 이후 작동하지 않습니다는 ICollection에와 ICollection에에 절은 Func을하지 표현을 사용하는 곳