我正在使用Entity Framework在表上运行查询。但是,我只需要选择列。
class MyEvent
{
public string Name { get; set; }
public int Id { get; set; }
virtual Stage EventStage { get; set; }
..... more columns .....
}
class Stage
{
public string Name { get; set; }
public string Location { get; set; }
..... more columns .....
}
我可以写一个IQueryable
来回复这些
dbContext.MyEvents
.Select(s =>
new {
Name = s.Name,
Id = s.Id,
EventStage = new
{
Name = s.EventStage.Name,
Id = s.EventStage.Id
}
}
)
.ToList();
这按预期工作,只给我感兴趣的那些列。
现在,我需要使用表达式树动态构造“选择”调用,这是like here。
我怎样才能做到这一点?是否可以通过表达式构建一个匿名对象,如上所述?
编辑:我的用例是我有一个通用的dB上下文类,它将列列表作为要获取的字符串。在过去,我们返回所有列,忽略该输入列表。所以,现在我需要动态生成select语句以仅返回所需的列子集,这可以通过匿名对象或动态创建的DTO来完成。
谢谢
也许你可以使用像这里的ToDynamic
方法:
https://gist.github.com/volak/20f453de023ff75edeb8
此问题的一个可能用例:让用户选择要显示的列并仅查询那些选定的列,这样就不会始终从数据库中查询整个实体。
定义一个强类型对象并返回该对象。我会避免使用动态对象。
注意:您无法返回匿名对象。