2010-08-31 62 views
0

你能幫我下一個:我想在一個查詢中添加SqlMethods.Like()的變量計數?如何在一個查詢中添加SqlMethods.Like()的變量計數?

例如:我在列表catCode中有四個單詞,我如何使用四個SqlMethods.Like()創建LINQ查詢?

using (var db = new MappingDataContext(_connection)) 
{ 
    db.ObjectTrackingEnabled = false; 

    return (
     from r in db.U_CDW_REPORTs 
     where (catCode.Length > 0 ? 
      SqlMethods.Like(r.CATEGORY, catCode) : r.CATEGORY != "*") 
     where r.SI_QTY > 0 
     orderby r.SI_QTY descending 
     select new Item 
     { 
      ... 
     }).ToList(); 
} 
+0

我不太明白。請澄清? – 2010-08-31 14:28:34

回答

2

您需要的是動態的或運行的SqlMethod.Like操作。你需要PredicateBuilder


更新:這是一個如何使用謂詞構建器的示例。

string[] searchItems = 
    new string[] { "Pattern1", "Pattern2", "Pattern3" }; 

var likeExpression = PredicateBuilder.False<U_CDW_REPORT>(); 

foreach (string searchItem in searchItems) 
{ 
    var searchPattern = "%" + searchItem + "%"; 
    likeExpression = likeExpression.Or(r => 
     SqlMethods.Like(r.CATEGORY, searchPattern)); 
} 

return (
    from r in db.U_CDW_REPORTs.Where(likeExpression) 
    where r.SI_QTY > 0 
    orderby r.SI_QTY descending 
    select new Item { ... }).ToList(); 
+0

這是好東西,但我真的不知道如何在查詢中使用它。 你能幫我嗎? – misho 2010-09-01 08:05:08

+0

看看我更新的答案。 – Steven 2010-09-01 08:53:12

1

您的意思是你有4個不相交的LIKE子句?

from entityRow in ctx.MyEntity 
where (SqlMethods.Like(entityRow.Col, "%Pattern1%") 
    || SqlMethods.Like(entityRow.Col, "%Patte%rn2%") 
    || SqlMethods.Like(entityRow.Col, "Pattern3%") 
    || SqlMethods.Like(entityRow.Col, "%Patte%rn4%")) 
select entityRow; 

UPDATE:

在這種情況下,看看這個:LINQ for LIKE queries of array elements

+0

你是對的。但是,模式的數量可以是隨機的。 – misho 2010-08-31 14:39:02

+0

@misho:更新。 – Ani 2010-08-31 14:46:34

1

編輯:使代碼更簡單。另請注意下面的更新說明。

您可以使用多個Where子句以以下方式構建查詢。請注意,此方法與Where條款相同,這意味着所有搜索條件都需要存在。換句話說,它與... where (condition1) && (condition2) && (conditionN)類似。

string[] words = { "A", "B", "C" }; 
var query = dc.Products.AsQueryable(); // gives us an IQueryable<T> to build upon 
foreach (var s in words) 
{ 
    query = query.Where(p => SqlMethods.Like(p.ProductName, "%" + s + "%")); 
} 

foreach (var item in query) 
{ 
    Console.WriteLine(item.ProductName); 
} 

這個想法是設置查詢的第一部分,然後遍歷搜索條件並更新查詢。當然你應該根據需要更新你的模式;我僅用於說明目的使用%word%