数组的Lambda绑定表达式

时间:2013-02-21 10:16:56

标签: c# linq lambda expression-trees

我目前正致力于使用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;} }

以上是我想要实现的方案。对于简单的情况,我能够做到这一点,但我正在努力绑定到集合。

我希望我的问题有足够的描述。如果您需要更多信息,请回复。任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:2)

问题是您尝试将类型IEnumerable<B>的值推送到类型为IEnumerable<RuntimeType2>的属性中。您必须使用嵌套选择(必须使用Expression API创建以调用Enumerable.Select方法)在两者之间进行转换。