在linq中使用fieldNames列表进行动态投影

时间:2018-07-10 08:18:34

标签: c# entity-framework linq entity-framework-6 dynamic-linq

我想对每个实体中我的集合和嵌套集合的字段进行投影, 我使用EntityFramework 6.2 我已经通过波纹管代码之类的动态查询来做到这一点

Students.Select("new (Name,Family,new(Category.Name) as Category)");

这是可行的,但是当我要在集合上执行此操作时会抛出错误

  Students.Select("new (Name,Family,new(Courses.Name,Courses.UnitName) as Courses)");

我想要的,它返回的结果是下面的代码

Students.Select(std=>new{
 std.Name, 
 Category=new{std.Category.Name},
 Courses=std.Courses.Select(co=>new{
  co.Name,co.UnitName
})}) ;

请与我分享您的想法

1 个答案:

答案 0 :(得分:1)

您无法使用System.Linq.Dynamic来做到这一点。 System.Linq.Dynamic.Core(该库的高级分支)是可能的。

等同于您以非动态方式编写的查询:

var q = Students.Select("new (Name, Category.Name as Category, Courses.Select(new (Name, UnitName)) as Courses)");

您正在寻找的只是Courses.Select(new (field1, field2)) as SomeAlias