从实体动态选择属性列表

时间:2010-08-25 09:49:43

标签: c# entity-framework linq

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

示例:

我的IEnumerable包含属性“Name”,“Age”。

我的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投影方法的表达式,以确定结果对象中包含哪些属性?

1 个答案:

答案 0 :(得分:0)

你做不到。编译器需要静态地知道枚举中项目的类型,即使它是匿名类型(var关键字表示隐式键入,而不是动态键入)

为什么你需要这样做?如果你解释你的要求是什么,我们可以提出另一种方法来做到这一点