2011-11-07 44 views
20

我試過尋找這個,但找不到適合我的情況的例子。Linq IN Operator

我有這種方法來回報客戶。我如何使用字符串數組來過濾它?包含對我不起作用。

public static List<Customer> GetCustomers(string[] customerCodesArray) 
{ 
    using (busDataContext g = new busDataContext()) 
    { 
     return g.Customers.Where(
      x => x.customerCode.Contains(customerCodesArray)).ToList(); 
    } 
} 
+1

請說明「究竟是什麼」不起作用... – Didaxis

+0

「不起作用」是什麼意思?你有編譯錯誤嗎?如果是這樣,那麼錯誤是什麼?或者你有運行時錯誤?如果是這樣,那麼錯誤是什麼? –

+1

[「Where In」with linq to sql](http://stackoverflow.com/questions/960827/where-in-with-linq-to-sql) – jrummell

回答

31

試試下面的代碼是什麼:

return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList(); 
+2

儘管技術上正確,但在使用SQL時,這不是性能最佳的解決方案。它需要掃描整個Customers表,最有可能的是在客戶代碼陣列上應用每條記錄。這個複雜度變爲O(N * M)。 使用Linq連接語句會更實用,所以生成的SQL查詢也可以使用連接。 –

+0

@TonniTielens完全依賴於數據庫的索引。它不一定會產生掃描(如果是這樣,連接也不會更好)。根據我的經驗,當'customerCodesArray'包含數以千計的項目時,插入臨時表並僅加入會提供性能優勢。 – Rob

20

您是倒退:

return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList(); 
11

我認爲你需要,因爲你想看看如果數組包含客戶代碼,而不是其他的方式來扭轉Contains表達。

試試這個:

return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList(); 
3

我想這是你想要

return g.Customers.Where(x => customerCodesArray.Contains(x.customerCode)).ToList(); 
5

嘗試

return g.Customers.Where(x=>customerCodesArray.Contains(x.CustomerCode)).ToList();