如何使用匿名对象创建动态Linq选择表达式
本文关键字:动态 Linq 选择 表达式 创建 对象 何使用 | 更新日期: 2023-09-27 18:02:54
我使用实体框架在表上运行查询。但是,我只需要得到select列。
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();
这是预期的工作,给我那些我感兴趣的专栏。
现在,我需要使用表达式树动态地构造'Select'调用,就像这里一样。
我怎么才能做到呢?是否可以像上面那样通过表达式构造一个匿名对象?
编辑:对我来说,用例是我有一个通用的dB上下文类,它将列列表作为要获取的字符串。在过去,我们返回所有列,忽略输入列表。因此,现在我需要动态地生成select语句来只返回所需的列子集,这可以通过匿名对象或动态创建的DTO来完成。
谢谢
也许你可以从这里使用类似ToDynamic
的方法:
这个问题的一个可能的用法:让用户选择要显示的列,并只查询所选的列,这样就不必总是从数据库中查询整个实体。
定义一个强类型对象并返回它。我会避免使用动态对象。
注意:不能返回匿名对象