如何使用匿名对象创建动态Linq Select Expression

时间:2016-08-18 15:20:36

标签: c# entity-framework linq iqueryable

使用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来完成。

由于

2 个答案:

答案 0 :(得分:0)

也许您可以从此处使用类似ToDynamic方法的方法:

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

此问题的可能用例: 让用户选择要显示的列并仅查询那些选定的列,因此您不必总是查询数据库中的整个实体。

答案 1 :(得分:-2)

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

注意:您无法返回匿名对象。