我有一个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投影方法的表达式,以确定结果对象中包含哪些属性?
答案 0 :(得分:0)
你做不到。编译器需要静态地知道枚举中项目的类型,即使它是匿名类型(var
关键字表示隐式键入,而不是动态键入)
为什么你需要这样做?如果你解释你的要求是什么,我们可以提出另一种方法来做到这一点