数组的 Lambda 绑定表达式

问题描述 投票:0回答:1

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

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

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

c# linq lambda expression-trees
1个回答
2
投票

问题在于您尝试将

IEnumerable<B>
类型的值推入
IEnumerable<RuntimeType2>
类型的属性中。您必须使用嵌套选择在两者之间进行转换(您必须使用表达式 API 创建该选择来调用
Enumerable.Select
方法)。

© www.soinside.com 2019 - 2024. All rights reserved.