1

我有来自 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() 方法不能在数据库端运行。

任何简单的解决方案如何编写正确的等效代码可以正常工作,会很简单吗?我在 foreach 中看到了一些解决方案,但在我看来,它不会很好。

4

1 回答 1

0

您将分两步工作:

  1. 获取你想要的数据
  2. 把它变成你想要的形式
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();
}
于 2013-10-21T14:01:58.800 回答