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