我目前正致力于使用Lambda Expressions编写动态选择子句,并且我必须处理嵌套集合。例如
class A
{
public string Property1 {get;set;}
public string Property2 {get;set;}
public IEnumerable<B> Property3 {get;set;}
}
class B
{
public string Prop1 {get;set;}
public int Prop2 {get;set;}
}
我有如上所示的A类和B类,但是我得到了A的集合,因为A中的这些数据将被绑定到网格,所有属性都不是必需的。它像视图一样依赖。视图定义要显示的字段。因此,我正在动态创建对象并为其添加所需的属性。我已经使用Lambda Expression完成了如下所示,
Expression.Bind(p, Expression.PropertyOrField(entityExpression, p.Name))
如果我必须从A类中仅选择Property1和Property2,这是有效的,但是如果我想要Property3这是集合,它将无法正常工作,因为我正在创建类型,只是添加所需的属性。因此,在运行时我将有像
这样的场景IEnumerable<RuntimeType2> => RuntimeType2 { string Prop1 {get;set; }
IEnumberable<RuntimeType1> =>
RuntimeType1 { string Property1 {get;set;
IEnumerable<RuntimeType2> Property3 {get;set;} }
以上是我想要实现的方案。对于简单的情况,我能够做到这一点,但我正在努力绑定到集合。
我希望我的问题有足够的描述。如果您需要更多信息,请回复。任何指针都会有所帮助。
答案 0 :(得分:2)
问题是您尝试将类型IEnumerable<B>
的值推送到类型为IEnumerable<RuntimeType2>
的属性中。您必须使用嵌套选择(必须使用Expression API创建以调用Enumerable.Select
方法)在两者之间进行转换。