【问题标题】:Dynamically select a list of properties from an entity从实体中动态选择属性列表
【发布时间】:2010-08-25 09:49:43
【问题描述】:

我有一个集合 IEnumerable。在 LINQ 查询中,我希望只从类型 T 中选择此集合中的属性,将其转换为匿名类型,其中 T 是 POCO 业务对象。

例子:

我的 IEnumerable 包含属性“姓名”、“年龄”。

我的 POCO 是:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
    public string Phone { get; set; }
}

我想达到与下面相同的效果,但不对匿名类型的成员进行硬编码,而是使用我的 PropertyInfo 集合。

IEnumerable<Person> peeps = GetPeople();
var names = from p in peeps
            select new {Name = p.Name, Age = p.Age};

如果我使用的是实体框架,我可以将 Entity SQL 与动态构造的字符串 where 子句一起使用,但是虽然不是严格的硬编码,但我仍然使用属性的字符串名称。

难道我不能动态地为 .Select 投影方法构造一个表达式来确定结果对象中包含哪些属性吗?

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    你不能那样做。编译器需要静态知道枚举中项目的类型,即使它是匿名类型(var 关键字表示 implicit 类型,而不是 dynamic 类型)

    为什么需要这样做?如果您解释您的要求是什么,我们可能会建议另一种方法

    【讨论】:

    • 我正在导出 JobCard 对象的集合。包含在对象的 CSV 表示中的每个对象的属性取决于用户角色。目前,我只是遍历角色包含的属性列表,并使用反射从每个 JobCard 对象中获取它们的值。我仅以“var”为例。我可以不使用“动态”吗?不过我对此一无所知。
    • 请看我的编辑。我知道我说的是“在 LINQ 查询中”,但只是出于兴趣,对动态属性集的限制取决于平台,可以使用实体框架来实现。
    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多