0

我目前正在使用 Lambda 表达式编写动态选择子句,并停留在必须处理嵌套集合的地方。例如

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.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;} }

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

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

4

1 回答 1

2

The problem is that you try to push a value of type IEnumerable<B> into a property with type IEnumerable<RuntimeType2>. You have to convert between the two by using a nested select (that you have to create using the Expression API to call the Enumerable.Select method).

于 2013-02-21T12:20:03.290 回答