【发布时间】:2014-05-29 00:47:43
【问题描述】:
场景是这样的: - EF 存储过程返回 5 列作为 DataResult - 我只需要 3 列,所以我编码了
var data = (from i in db.GetDataResult()
select new DataResult
{
prop1 = i.prop1,
prop2 = i.prop2,
prop3 = i.prop3,
}).ToList();
- 如果没有硬编码字符串名称,我想获取所选列的名称,即 prop1、prop2 和 prop3。
如何以编程方式实现这一点?
【问题讨论】:
-
typeof(DataType).GetProperties().Where(p => p.Name.Contains("something")).Select(p => p.Name)将返回包含“某物”的所有属性的名称。您可以使用Where()子句过滤任何内容。除了select new DataResult,您可以使用只包含您要查找的字段的匿名对象。例如,请参阅stackoverflow.com/questions/3645494/…。 -
如果我选择匿名,我会收到无法将匿名类型转换为 IList 或 IEnumerable 的错误。但是,使用匿名而不是指定类型有什么好处呢?
-
它也适用于匿名类型,
var s = x.GetType().GetProperties().Where(p => p.Name.Contains("something")).Select(p => p.Name).FirstOrDefault();
标签: c# linq entity-framework reflection