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

问题描述 投票:3回答:2

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

谢谢

c# entity-framework linq iqueryable
2个回答
1
投票

也许你可以使用像这里的ToDynamic方法:

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

此问题的一个可能用例:让用户选择要显示的列并仅查询那些选定的列,这样就不会始终从数据库中查询整个实体。


-2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.