Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表达式.Lambda和运行时查询生成,嵌套属性“;其中”;例子_C#_Lambda_Expression Trees_Dynamic Language Runtime - Fatal编程技术网

C# 表达式.Lambda和运行时查询生成,嵌套属性“;其中”;例子

C# 表达式.Lambda和运行时查询生成,嵌套属性“;其中”;例子,c#,lambda,expression-trees,dynamic-language-runtime,C#,Lambda,Expression Trees,Dynamic Language Runtime,我在一个关于为Where查询构建表达式树的问题上找到了非常好的答案 是否有人可以帮助我,并向我展示如何在具有嵌套属性的场景中实现此示例。我的意思不是: var result = query.Where(item => item.Name == "Soap") 采用该解决方案: var item = Expression.Parameter(typeof(Item), "item"); var prop = Expression.Property(item, "Name"); var

我在一个关于为Where查询构建表达式树的问题上找到了非常好的答案

是否有人可以帮助我,并向我展示如何在具有嵌套属性的场景中实现此示例。我的意思不是:

var result = query.Where(item => item.Name == "Soap")
采用该解决方案:

var item = Expression.Parameter(typeof(Item), "item");

var prop = Expression.Property(item, "Name");

var soap = Expression.Constant("Soap");

var equal = Expression.Equal(prop, soap);

var lambda = Expression.Lambda<Func<Item, bool>>(equal, item);

var result = queryableData.Where(lambda);
(这个答案最初是由OP在问题中发布的。)

这个问题可以通过以下方法解决:

var item = Expression.Parameter(typeof(Item), "item");

var dataExpr = Expression.Property(item, "Data");

var prop = Expression.Property(dataExpr, "Name");

var soap = Expression.Constant("Soap");

var equal = Expression.Equal(prop, soap);

var lambda = Expression.Lambda<Func<Item, bool>>(equal, item);

var result = queryableData.Where(lambda);
var item=Expression.Parameter(typeof(item),“item”);
var dataExpr=Expression.Property(项目“数据”);
var prop=Expression.Property(dataExpr,“Name”);
var soap=表达式常数(“soap”);
var equal=表达式.equal(prop,soap);
var lambda=表达式.lambda(相等,项目);
var result=queryableData.Where(λ);

这是与上面发布的答案相同的答案,但我发现这在可视化表达式树方面更具可读性:

var parameterItem = Expression.Parameter(typeof(Item), "item");

var lambda = Expression.Lambda<Func<Item, bool>>(
    Expression.Equal(
        Expression.Property(
            Expression.Property(
                parameterItem, 
                "Data"
            ), 
            "Name"
        ), 
        Expression.Constant("Soap")
    ), 
    parameterItem
);

var result = queryableData.Where(lambda);
var parameterItem=Expression.Parameter(typeof(Item),“Item”);
var lambda=表达式.lambda(
表达式。相等(
表达式.属性(
表达式.属性(
参数,
“数据”
), 
“姓名”
), 
常量表达式(“Soap”)
), 
参数
);
var result=queryableData.Where(λ);

什么是
数据
?指定此属性谢谢您的帮助。我终于解决了这个问题-你可以在下面查看更新。添加第二行,更改第三行。
var parameterItem = Expression.Parameter(typeof(Item), "item");

var lambda = Expression.Lambda<Func<Item, bool>>(
    Expression.Equal(
        Expression.Property(
            Expression.Property(
                parameterItem, 
                "Data"
            ), 
            "Name"
        ), 
        Expression.Constant("Soap")
    ), 
    parameterItem
);

var result = queryableData.Where(lambda);