如何使用匿名对象创建动态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来完成。

谢谢

如何使用匿名对象创建动态Linq选择表达式

也许你可以从这里使用类似ToDynamic的方法:

https://gist.github.com/volak/20f453de023ff75edeb8

这个问题的一个可能的用法:让用户选择要显示的列,并只查询所选的列,这样就不必总是从数据库中查询整个实体。

定义一个强类型对象并返回它。我会避免使用动态对象。

注意:不能返回匿名对象