2013-05-22 2 views
0

내가 뭘하려고하는 건가요 (JSON에서) 최신 (상위 1) 수정 된 제품과 함께 목록의 목록을 반환합니다.EF로드 관련 컬렉션 부분적으로

제품 카테고리가 있습니다. & 카테고리 클래스가 있습니다.

Class Category{ 
    public string Name {get;set;} 
    public ICollection<Product> Products {get;set;} 
    public Product FirstProduct { get { return   Products.OrderByDescending(p=>p.Modified).FirstOrDefault;} 

다음과 같은

.... 
return db.Categories.Include(p=>p.Products.OrderByDescending(m=>m.Modified).Take(1).FirstOrDefault()); 
..... 

을 수행하지만 그건 작동하지 않는 MVC API를 컨트롤러 ...

예상 결과이 같은 것입니다 (사실 만하면 이름 및 FirstProduct 열) :

[ 
{Name : "Category1", FirstProduct : {Name : "Product1"}, Products : [{Name: "Product1}] 
{Name : "Category2", FirstProduct : {Name : "Product1"}, Products : [{Name: "Product1}] 
{Name : "Category3", FirstProduct : {Name : "Product1"}, Products : [{Name: "Product1}] 
] 

답변

1

투영은 해결책이 될 수 있습니다 :

IEnumerable<Category> categories = db.Categories 
    .Select(c => new 
    { 
     Category = c, 
     FirstProduct = c.Products 
      .OrderByDescending(p => p.Modified) 
      .FirstOrDefault() 
    }) 
    .AsEnumerable() 
    .Select(x => x.Category); 

모든 속성을 만 필요한 속성을 투사 할 수있는 대신 Category = c의 예를 들어 당신이 Product의 속성을 투사 할 CategoryName = c.Name를 사용하거나 SelectFirstOrDefaultOrderByDescending 사이를 추가 필요하지 않은 경우.

+0

동일한 문제가 발생하지 않습니까? 제품이로드되지 않았습니까? "firstProduct"getter가 작동하지 않는 문제가 발생했습니다 (제품 콜렉션이로드되지 않고 first gettube에서 null이됩니다) – Marty

+0

@Marty :'Category'와'Product' 사이의 관계가 일대 다 many-to-many) EF가'Category'의 콜렉션에 자동적으로'FirstProduct'를 추가 할 것이기 때문에 작동합니다 (* relationship fixup *이라고 부름). – Slauma

관련 문제