在嵌套集合中将IQueryable转换为IList

时间:2013-10-21 13:53:38

标签: c# entity-framework iqueryable ilist

我有来自Entity Framework的这些实体: Parent,Child,GrandChild和等效实体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中看到了一些解决方案,但在我看来,它不会很好。

1 个答案:

答案 0 :(得分:0)

您可以分两步完成:

  1. 获取您想要的数据
  2. 将其带入您想要的表格
  3. 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();
    }