2013-08-19 94 views
0

如果我在使用Linq的描述字段中搜索,那麼在使用這兩個查詢進行搜索時會收到不同的結果。首先由此%MODULE%ALLEN BRADLEY%,然後再由此查詢%ALLEN BRADLEY%MODULE%。我希望這些搜索查詢能夠在結果字段的任何地方出現這些字詞時給我一個結果。在Linq中使用SQL「In」而不是「Like」使用%wildcards%

我讀了關於使用LIKE以正確的順序在字符串中搜索模式的sql,例如搜索%MODULE%ALLEN BRADLEY%會強制結果在字符串中以該特定順序。但是,使用關鍵字「In」會在字符串內的任何位置搜索通配符。

我如何在Linq中實現這一目標?

這是我的LINQ方法:

public List<Item> SearchItems(string itemid, string description) 
    { 
     return (from allitems in _dbc.Items 
       where SqlMethods.Like(allitems.Number, itemid) 
       && SqlMethods.Like(allitems.DESCRIPTION, description) 
       select allitems); 
    } 
+2

您應該對這些類型的搜索使用全文搜索。將第一個字符作爲通配符排除使用錯誤,並確定您的設計不好。 – HLGEM

+0

謝謝你的評論@HLGEM,設計可能不好,但客戶要求搜索應該包括「以通配符開頭」。通配符搜索實際上是系統內的用戶輸入。 – gardarvalur

+1

這就是爲什麼你需要研究全文搜索。實際上,實施起來很棘手,但它會解決您的問題,速度更快。 – HLGEM

回答

1

您可以在一個以上的線創建查詢,然後使用ToList()方法,它執行:

public List<Item> SearchItems(string itemid, string description) 
{ 
    IQueryable<Item> query = _dbc.Items.Where(x => SqlMethods.Like(x.Number, itemid)); 

    foreach(var word in description.Split(new char[] { '%' }, StringSplitOptions.RemoveEmptyEntries) 
    { 
     query = query.Where(x => SqlMethods.Like(x.Description, 
               string.format("%{0}%", word))); 
    } 

    return query.ToList(); 
} 

然而,正如已經建議 - 你應該考慮使用全文搜索。