【发布时间】:2014-04-11 15:25:30
【问题描述】:
我有一个带有子集合的对象集合。 我想将其展平以使用 LINQ 进行报告。
我不知道这是否可能。
例如人员对象列表,每个对象都有一个子特征列表。
伪代码:
public sealed class Person
{
public Name { get; set;}
IEnumerable<Feature> Features
}
public sealed class Feature
{
public FeatureName { get; set;}
public FeatureValue { get; set;}
}
数据:
John
Height 183
Sex Male
Jane
Height 160
Sex Female
Additional Test
需要的输出:
Name Height Sex Additional
John 183 Male
Jane 160 Female Test
实际上我想绑定到:
class Person
{
public Name { get; set;}
public Height { get; set;}
public Sex { get; set;}
public Additional { get; set;}
}
编辑:将动态类型与 Activator.CreateInstance 一起使用,如下所示调用采用基本 Person 类型的构造函数:
_results = from person in _people select Activator.CreateInstance(_personWithFeaturesType, person);
创建以下答案:
System.Linq.Enumerable.WhereSelectEnumerableIterator<Person,object>
调试时扩展结果视图是我创建并存储在 _personWithFeaturesType 成员变量中的新类型的列表。
我不明白返回的是什么,是一个以对象为键的 Person 对象列表吗? 第 3 方网格中的 WPF 绑定似乎无法处理:
System.Linq.Enumerable.WhereSelectEnumerableIterator<Person,object>
但确实处理:
IEnumerable<Person>
【问题讨论】:
-
每个人都有相同的特征,还是有些人有一个特征而有些人有其他?
-
实际上是一个键值列表,有些是通用的,有些不是。
-
特征列表也是用户可定义的,并且来自数据库表。我希望避免在运行时使用 PropertyBuilder 等为每个功能动态创建一个具有属性的类
标签: c# linq-to-objects