2013-10-21 3 views
0

Entity Framework에서이 엔터티가 있습니다. 부모, 자식, GrandChild 및 이와 동등한 엔터티 ParentModel 및 ChildModel.중첩 컬렉션에서 IQueryable을 IList로 변환

간체 :

class ParentModel 
{ 
    public IList<ChildModel> Children { get; set; } 
} 

class ChildModel 
{ 
    public string GrandChild { get; set; } 
} 

부모 확장에 나는

public static IEnumerable<ProductCategoryModel> ToModel(
    this IQueryable<ProductCategory> query) 
{ 
    IList<ParentModel> model = 
     query.Select(p => new ParentModel { 
          Childs = p.Childs.Select(ch => new ChildModel { 
               Grandchild = ch.Grandchild.Code 
               }).ToList() 
        }).ToList(); 

    return model; 
} 

문제는 그것이 작동하지 않는다는 것입니다 방법 "ToModel"가. 왜 DB 영역에서는 중첩 된 ToList() 메소드를 실행할 수 없는지 알고 있습니다.

쉽게 해결할 수 있습니까? 올바른 작동을하는 올바른 코드를 작성하는 것이 간단할까요? 내가 foreach에서 몇 가지 해결책을 볼 수 있지만 내 생각에, 그것은 좋지 않을 것입니다.

+0

은 '아무튼'가 작동하지 않습니다 "원하는

  • 는 형태로 가져와 원하는 데이터를 가져옵니다 우리에게 어떤 일이 일어나는 지 알려주십시오. 예외가 있습니까? 그것은 빈 결과를 줍니까? 다른 것? –

    답변

    0

    당신은 두 단계로 작동합니다 :

    1. 당신이
    public static IEnumerable<ProductCategoryModel> ToModel(
        this IQueryable<ProductCategory> query) 
    { 
        return query.Select(p => new 
             { 
              Children = p.Childs 
                 .Select(ch => new ChildModel() 
                   { 
                   Grandchild = ch.Grandchild.Code 
                   }) 
             }) 
           .AsEnumerable() 
           .Select(x => new ParentModel { Children = x.Children.ToList() }) 
           .ToList(); 
    }