2013-01-16 78 views
0

如何執行SearchFilter邏輯運算符ANDOR以編程方式基於用戶選擇的操作?SearchFilter邏輯運算符AND和或

如果用戶給出這樣的選擇"[To]ContainsSubstring'Ram' OR [To]containssubstring'lak'如何執行它?

回答

0

您可以將各個過濾器定義爲Expressions,然後根據用戶的選擇將它們組合。


編輯:我的建議是創建謂詞(據我所知,現在已被取消,該建議是使用函數功能基本上是一樣的東西),然後將它們組合成一個表達式,它適用於你必須填寫的清單。

一個例子,我在這裏找到:Combine Multiple Predicates


我在過去做的是根據用戶的選擇謂詞結合起來,然後將其編譯成一個表達式,然後用其作爲參數傳遞給Linq的凡擴展方法。

所以,一個例子(不知道這是否會編譯現在:)寫的:

List<Customer> list = new List<Customer>(); 
List<Func<Customer,bool>> predicateList = new List<Func<Customer,bool>>(); 

if(/*user choice condition*/) 
{ 
    predicateList.Add(c => c.Name.Contains("test")); 
} 
if (/*user choice condition*/) 
{ 
    predicateList.Add(c => c.Name.Contains("test") || c.Description.Contains("buyer")); 
} 
//etc. 


Expression<Func<IWorkItem, bool>> filterExpression = c => whereClausePredicates.All(pred => pred(c)); 
var filteredCustomers = list.Where(filterExpression.Compile()); 
+0

感謝您的回覆dutzu.Canü電話我爲它的任何實例。 – user1891567

+0

感謝您的回覆dutzu.How我們可以篩選公共文件夾中的項目基於那裏DateTime發送和收到??我試過這個'filter = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeSent,「28/08/12 6:34:06 PM「);'...但錯誤生成。錯誤 - 指定的值對於屬性無效...我以正確的格式指定了值。 – user1891567

+0

@ user1891567當比較日期時間你不能依賴字符串,我希望你那裏的邏輯首先解析你發送給DateTime的字符串,然後比較兩個 – dutzu