我目前正在使用 lambda 表达式编写动态 select 子句,但陷入了必须处理嵌套集合的困境。
例如:
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; }
IEnumerable<RuntimeType1> =>
RuntimeType1 { string Property1 {get;set;
IEnumerable<RuntimeType2> Property3 {get;set;} }
以上是我想要实现的场景。对于简单的情况,我可以做到这一点,但是我很难绑定到集合。
我希望我的问题有足够的描述。如果您需要更多信息,请回复。任何指示都会有帮助。
问题在于您尝试将
IEnumerable<B>
类型的值推入 IEnumerable<RuntimeType2>
类型的属性中。您必须使用嵌套选择在两者之间进行转换(您必须使用表达式 API 创建该选择来调用 Enumerable.Select
方法)。