나는 다음과 같은 간단한 시나리오를 가지고있다. 내 edmx에 정의 된 Customer 클래스가 있습니다. Order 클래스도 있으며 고객은 Orders 속성을 통해 0 개 이상의 Orders를 가질 수 있습니다.EF 사용자 정의 셀렉터 식
public partial class Customer
{
public int OrderCount { get; set; }
}
내가 쉽게 적절하게이 ordercount가의 값을로드 선택 쿼리를 작성하고 싶습니다 :
는이 같은 내 Customer 클래스에 ordercount가 속성을 정의했다. 나는 고객 클래스에서이 일을 시도 : 다음public partial class Customer
{
public int OrderCount { get; set; }
public static Expression<Func<Customer, Customer>> DetailSelector = c =>
{
c.OrderCount = c.Orders.Count;
return c;
};
}
그리고 선택 쿼리 그러나
var customersWithOrderCount = ctx.Customers.Select(Customer.DetailSelector);
, 나는 오류가이 방법을 성명 본체와 람다가로 변환 할 수없는 표현식. 은 그 때 나는이 작업을 수행하려고 :
public partial class Customer
{
public int OrderCount { get; set; }
public static Expression<Func<Customer, Customer>> DetailSelector = c => Customer.LoadDetail(c);
public static Customer LoadDetail(Customer customer)
{
customer.OrderCount = customer.Orders.Count;
return customer;
}
}
그러나 나는 다음과 같은 예외가 얻을 선택 쿼리 실행이 방법 :
LINQ to Entities does not recognize the method 'Customer LoadDetail(Customer)' method, and this method cannot be translated into a store expression.
어떻게이 작업을 수행하는 가장 쉬운 방법이 될 것입니까?
UPDATE : 그냥 설명을 위해, 내가 특별히 식을 할 수있는 방법을 찾고 있어요. 따라서 데이터베이스에서 Orders를로드하지 않으려면 OrderCount 속성을 채우고 싶습니다. 감사합니다,
예 (물론 저장소 패턴의 사용을 의미한다) 그러나 나는 WCF와 분산 시나리오에서 고객 인스턴스를 사용하고, 나는로드하지 않고 Orders를 클라이언트에게 보내고, 그 수만 계산하십시오. (그리고 이것은 실제 응용 프로그램에서 이처럼 많은 다른 속성이있는 단순한 예입니다.) –