2012-09-24 56 views
0

我有一個字典Dictionary<string, List<string>> FilterDictionary其中包含一個列名稱作爲關鍵和該關鍵字的值是將被用作where子句的條件列表。Linq到SQL多列

我需要查詢我的數據庫,並且對於字典中的每個列查詢該列的條件列表中的那個鍵。

想知道做這件事的最好方法是什麼?

這就是我想達到的,但顯然我知道它並不像columnName == filterCriteria那麼簡單。

var originalQuery = from p in productContext.Products 
        select p; 
foreach (var item in FilterDictionary) 
{ 
    string columnName = item.Key; 

    foreach (var filterCriteria in FilterDictionary) 
    { 
     originalQuery.Where(columnName == filterCriteria); 
    } 
} 
+1

是否有理由不使用或不能使用'Expression >'集合? – Yuck

+0

只是因爲之前從未做過。你會說這是最好的路線嗎? – lnelson92

+0

我會這麼說。看到我的答案。通過這種方式您可以獲得強大的打字和編譯時安全性。在構建過濾條件的同時,您還可以獲得智能感知。 – Yuck

回答

1

我會做這樣的事情,而不是牽着你的過濾條件集合:

var filters = new List<Expression<Func<Product, Boolean>>>(); 
filters.Add(e => e.Name == "some name"); 

var originalQuery = from p in productContext.Products 
        select p; 
originalQuery = filters 
    .Aggregate(originalQuery, (current, condition) => current.Where(condition)); 

foreach循環結束,originalQuery將有邏輯AND編在一起的所有持有標準在filters

+0

觀看修改後的封閉陷阱! (在循環變量中捕獲'filter') –

+0

@GertArnold右 - 您可以使用LINQ聚合來避免這種情況,並使代碼更具可讀性,這是我編輯的。 – Yuck

+0

真的,這是要走的路,留在這個概念之內! –