2013-08-17 69 views
0

我想使用ling-to-sql在多列中搜索字符串,我在想如何編寫where子句。這是我:我傳遞ID的列表,以及搜索作爲搜索詞:linq搜索多列

public List<long> Seach(string TheSearchTerm, List<long> TheIDs) 
{ 

using (SomeDataContext TheDC = new SomeDataContext()) 
{ 
    var TheOutput = (from t in TheDC.SomeTable 

        where TheIDs.Contains(t.ID) && 
         where "TheSearchTerm is in one of the columns" 

        select t.ID).ToList(); 
    } 
} 

我怎樣寫第二where子句中的所有列的搜索?我想爲每一列寫一個where子句,但我想知道是否有更好的方法。

謝謝。

回答

5
var TheOutput = (from t in TheDC.SomeTable 

       where TheIDs.Contains(t.ID) && (
       t.column1.Contains(TheSearchTerm) || 
       t.column2.Contains(TheSearchTerm) || 
       t.column3.Contains(TheSearchTerm))   
       select t.ID).ToList(); 
} 

您應該只有一個where子句並將所有列的檢查合併到||

+0

反正有沒有明確包含列名? – frenchie

+0

不是純粹的linq-to-sql。但是,您可以創建一個存儲過程來搜索所有字符類型的列,然後從L2S上下文中調用該SP。 –

4

我有叫SearchExtensions一個NuGet包解決了這個非常問題:

var result = TheDC.SomeTable.Search(t => t.Id).EqualTo(TheIDs) 
          .Search(t => t.Column1, t => t.Column2, t => t.Column3) 
          .Containing(TheSearchTerm) 
          .Select(t => t.ID).ToList(); 

另外,如果你想查詢對所有字符串屬性,你可以做到以下幾點:

var result = TheDC.SomeTable.Search(t => t.Id).EqualTo(TheIDs) 
          .Search().Containing(TheSearchTerm) 
          .Select(t => t.ID).ToList(); 

這兩種方法都會創建Expressions Trees來將正確的指令發送到sql server,這意味着只有匹配的記錄纔會從數據庫中返回。