Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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# 动态构建linq表达式_C#_Asp.net_Linq_Sharepoint_Expression - Fatal编程技术网

C# 动态构建linq表达式

C# 动态构建linq表达式,c#,asp.net,linq,sharepoint,expression,C#,Asp.net,Linq,Sharepoint,Expression,我需要动态构建LINQ表达式 这需要是完全通用和动态的。我能够构造一些简单的表达式,但我正在努力构造更复杂的嵌套表达式 例如,我想读取以下内容并将其构造成一个表达式(在代码中动态地) 我想将其转换为expression格式的表达式,然后将其传递给where子句 只需补充一点,我正在使用Camlex.NET将此表达式转换为Caml查询 更新: 我试过这个: var inner = PredicateBuilder.False<SPListItem>(); inner = inner.O

我需要动态构建
LINQ
表达式

这需要是完全通用和动态的。我能够构造一些简单的表达式,但我正在努力构造更复杂的嵌套表达式

例如,我想读取以下内容并将其构造成一个表达式(在代码中动态地)

我想将其转换为
expression
格式的表达式,然后将其传递给where子句

只需补充一点,我正在使用
Camlex.NET
将此表达式转换为
Caml
查询

更新:

我试过这个:

var inner = PredicateBuilder.False<SPListItem>();
inner = inner.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Submitted - Awaiting Approval");
inner = inner.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Reviewed - Awaiting Approval");
inner = inner.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Approval overdue");

var outer = PredicateBuilder.True<SPListItem>();
outer = outer.And(x => x["IAO"] == (DataTypes.UserId)"1");
outer = outer.And(inner);

var inner2 = PredicateBuilder.False<SPListItem>();
inner2 = inner2.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Review due");
inner2 = inner2.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Review overdue");

var outer2 = PredicateBuilder.True<SPListItem>();
outer2 = outer2.And(x => x["PrimaryIAA"] == (DataTypes.UserId)"1");
outer2 = outer2.And(inner2);

var inner3 = PredicateBuilder.False<SPListItem>();
inner3 = inner3.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Decommission requested");
inner3 = inner3.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Decommissioning overdue");

var outer3 = PredicateBuilder.True<SPListItem>();
outer3 = outer3.And(x => x["IAO"] == (DataTypes.UserId)"1");
outer3 = outer3.And(inner3);

var fullQuery = outer.And(outer2).And(outer3);

return Camlex.Query().Where(fullQuery).ToCaml(false).FirstOrDefault().ToString(SaveOptions.DisableFormatting);  
var-internal=PredicateBuilder.False();
内部=内部。或(x=>x[“资产状态”]==(DataTypes.Choice)“已提交-等待批准”);
内部=内部。或(x=>x[“资产状态”]==(DataTypes.Choice)“已审核-等待批准”);
内部=内部。或(x=>x[“资产状态”]==(数据类型.Choice)“批准过期”);
var outer=PredicateBuilder.True();
outer=outer.And(x=>x[“IAO”]==(DataTypes.UserId)“1”);
外部=外部和(内部);
var inner2=PredicateBuilder.False();
inner2=inner2.Or(x=>x[“资产状态”]==(DataTypes.Choice)“到期审核”);
inner2=inner2.Or(x=>x[“资产状态”]==(DataTypes.Choice)“审查过期”);
var outer2=PredicateBuilder.True();
outer2=outer2.And(x=>x[“primaryaa”]==(DataTypes.UserId)“1”);
outer2=outer2.和(inner2);
var inner3=PredicateBuilder.False();
inner3=inner3.Or(x=>x[“资产状态”]==(DataTypes.Choice)“请求解除委托”);
inner3=inner3.Or(x=>x[“资产状态”]==(DataTypes.Choice)“退役过期”);
var outer3=PredicateBuilder.True();
outer3=outer3.And(x=>x[“IAO”]==(DataTypes.UserId)“1”);
outer3=outer3.和(inner3);
var fullQuery=outer.And(outer2).And(outer3);
返回Camlex.Query().Where(fullQuery).ToCaml(false).FirstOrDefault().ToString(SaveOptions.DisableFormatting);
但我有一个错误:

不支持表达式类型“常量”


可能对您有用。尝试过了,但我得到一个错误:不支持表达式类型“Constant”。如果您可以在CAML中使用表达式本身,请首先尝试。也许CAML不支持这些字符串索引器。
var inner = PredicateBuilder.False<SPListItem>();
inner = inner.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Submitted - Awaiting Approval");
inner = inner.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Reviewed - Awaiting Approval");
inner = inner.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Approval overdue");

var outer = PredicateBuilder.True<SPListItem>();
outer = outer.And(x => x["IAO"] == (DataTypes.UserId)"1");
outer = outer.And(inner);

var inner2 = PredicateBuilder.False<SPListItem>();
inner2 = inner2.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Review due");
inner2 = inner2.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Review overdue");

var outer2 = PredicateBuilder.True<SPListItem>();
outer2 = outer2.And(x => x["PrimaryIAA"] == (DataTypes.UserId)"1");
outer2 = outer2.And(inner2);

var inner3 = PredicateBuilder.False<SPListItem>();
inner3 = inner3.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Decommission requested");
inner3 = inner3.Or(x => x["AssetStatus"] == (DataTypes.Choice)"Decommissioning overdue");

var outer3 = PredicateBuilder.True<SPListItem>();
outer3 = outer3.And(x => x["IAO"] == (DataTypes.UserId)"1");
outer3 = outer3.And(inner3);

var fullQuery = outer.And(outer2).And(outer3);

return Camlex.Query().Where(fullQuery).ToCaml(false).FirstOrDefault().ToString(SaveOptions.DisableFormatting);