2017-05-29 145 views
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 == facilityIdids.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中allCKallSelected,並ids.Contains()需要返回false

感謝您的幫助

回答

3

您只需在Expression.NotExpression.IsFalse()來包裝你的價值。

例如:

Expression.AndAlso(Expression.Not(allCkParam), ...) 
+0

作爲一個方面的問題,請參見編輯。 – Richard77

+1

@ Richard77請打開一個新問題,而不是追加問題。記得; SO主要用於幫助*未來*訪問者;一般問題很容易搜索 – Rob

+0

因爲。謝謝。 – Richard77