2010-05-27 80 views
1

我有一個ArrayList中的關鍵字列表,我希望能夠建立一個查詢來查找基於這個關鍵字的表中的記錄。LINQ基於列表的多個LIKE

由於關鍵字列表是動態的,因此我無法在此處創建固定查詢。

我做這樣的事情:

foreach (string kw in keywords) 
{ 
    query = query.Where(p => p.Name.StartsWith(kw)); 
} 

的「StartsWith」這裏需要因爲我需要尋找那些真正與所提供的關鍵字開始記錄。

在T-SQL它會是這樣的

Select * from Table where 
Name like 'keyword1%' 
or Name like 'keyword2%' 
or Name like 'keyword3%' 
or ... 

但我需要能夠做到這一點的LINQ?這可能嗎?

回答

3

這oughtta做到這一點:

var query = table.Where(p => keywords.Any(kw => p.Name.StartsWith(kw))); 
+0

我不知道LINQ to SQL是否真的很聰明。我知道EF3.5會因爲這樣的查詢而失敗。還是我的+1。 – Steven 2010-05-27 13:39:28

+0

使用這個我得到的「」本地序列不能用於除了Contains()運算符之外的查詢運算符的LINQ to SQL實現。「exception ... – Bathan 2010-05-31 12:18:52

+0

@Bathan:Huh;我猜@史蒂文的權利呢 - L2S不是不幸的是,我真的不明白用'Contains'來重寫它的簡單方法... – tzaman 2010-05-31 13:09:11

0
var query = table.Where(p => keywords.Any(kw => p.Name.StartsWith(keyword1) || p.Name.StartsWith(keyword2) || p.Name.StartsWith(keyword3) || p.Name.StartsWith(keyword4))); 

希望它可以幫助您有個愉快的一天。