2012-02-11 200 views
1

我想在字符串內搜索特定值。在字符串中搜索特定值

我想要做的是分割字符串,並看看每個值。 如果mySearch.EQUALS(拆分字符串值)然後返回ToList()中的記錄。

這是我的代碼。它返回零個記錄

// user search for sku = "2012" 
// p.productMatch in DB = "2012,2012L,2012LR,2011" 

var result = ctx.Products 
.Where(p => p.clientID == Config.ClientID) 
.Where(p => p.productMatch.Contains(sku)) 
.Select(v => new ProductView 
    { 
     productID = v.productID, 
     productMatch = v.productMatch, 
     productSKU = v.productSKU 
    }).ToList(); 


var results = from w in result 
      where w.productMatch.Split(',').Equals(sku) 
      select w; 


return results.ToList(); 

回答

4

目前,在你where w.productMatch.Split(',').Equals(sku)行你比較的結果Split()(這是字符串數組)與單串sku。由於顯而易見的原因,這失敗只需將它更改爲:

where w.productMatch.Split(',').Contains(sku) 
+0

工作! 我很親密,但迄今爲止:) - 謝謝。 – 2012-02-11 16:15:02

+1

您也可以在第一個查詢中刪除「ToList()」。 – 2012-02-11 16:26:22

2

在代碼中,你正在執行由Split操作所產生的string[]陣列上的相等比較和sku變量。由於這兩種類型不同,平等比較永遠不會成功。

你真正需要做的是比較string[]陣列中的每個元素sku:如果你想返回整個記錄,使用

var results = 
    from w in result 
    from part in w.productMatch.Split(',') 
    where part.Equals(sku) 
    select part; 

var results = 
    from w in result 
    where w.productMatch.Split(',').Any(part => part.Equals(sku)) 
    select w; 

或者,更好的是,使用@jimmy_keen建議的Contains方法來獲得更簡潔的代碼。