C# 将IQueryable转换为嵌套集合中的IList

C# 将IQueryable转换为嵌套集合中的IList,c#,entity-framework,iqueryable,ilist,C#,Entity Framework,Iqueryable,Ilist,我有实体框架中的实体: 父、子、孙和等效实体ParentModel和ChildModel 简化: class ParentModel { public IList<ChildModel> Children { get; set; } } class ChildModel { public string GrandChild { get; set; } } 在父扩展上,我有方法ToModel public static IEnumerable<ProductC

我有实体框架中的实体: 父、子、孙和等效实体ParentModel和ChildModel

简化:

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

class ChildModel
{
    public string GrandChild { get; set; }
}
在父扩展上,我有方法ToModel

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;
}
问题是它不起作用。 我知道为什么嵌套的ToList方法不能在DB端运行


有没有简单的解决方案,如何编写正确的等效代码,这将工作正常,将是简单的?我在foreach中看到了一些解决方案,但在我看来,这并不好。

您将分两步工作:

获取您想要的数据 把它变成你想要的形式
它不起作用,也不能告诉我们发生了什么。你有例外吗?它会给出空的结果吗?还有别的吗?
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();
}