0
几天前我问了this question,得到了很好的回应。还有一件事我遇到了麻烦。在构建表达式树时如何查找错误。c#表达式 - 如何检查虚假
下面是一个例子:
query.Where(d => (allCk && d.FacilityId == facilityId) //1.
||
(!allCk && allSelected && d.FacilityId == facilityId && !ids.Contains(d.Id)) //2.
||
(!allCk && !allSelected && ids.Contains(d.Id)) //3.
到目前为止,检查d.FacilityId == facilityId
和ids.Contains(d.Id)
是否是最容易的部分。
现在,正如您所看到的,根据块的不同,相同的布尔值检查其真实性,其他地方则相反。例如,在第1行中:成功的时候是allCK == true
而另外两个是allCK == false
。
这就是我写第一行的方式。
/* d */
ParameterExpression pe = Expression.Parameter(typeof(Document), "d");
/*(allCk && d.FacilityId == facilityId) ==> exp0*/
var facilityParam = Expression.Constant(facilityId);
var allCkParam = Expression.Constant(allCk);
Expression facilityIdProp = Expression.Property(pe, "FacilityId");
Expression facilityIdEql = Expression.Equal(facilityIdProp, facilityParam);
Expression exp0 = Expression.AndAlso(allCkParam, facilityIdEql);
我该如何表达我的意图,例如,成功的时候是allCK == false
? (其中包括2号线和3中allCK
,allSelected
,并ids.Contains()
需要返回false
)
感谢您的帮助
作为一个方面的问题,请参见编辑。 – Richard77
@ Richard77请打开一个新问题,而不是追加问题。记得; SO主要用于帮助*未来*访问者;一般问题很容易搜索 – Rob
因为。谢谢。 – Richard77