2016-01-28 19 views
-1

我有一個customer類型的列表。在檢查具有相同客戶號碼的客戶是否存在該特定客戶端之前,我需要在數據庫中插入所有列表值。 爲此,我發起了一個查詢,以讓我所有在數據庫中的客戶的客戶編號與列表中的客戶編號相同。我正在寫的查詢不起作用,下面是代碼。在LINQ中使用IN等價物獲取複雜對象

CustomerRepository.Find(x => x.ClientId == clientId) 
      .Where(x => x.CustomerNumber.Contains(lstCustomersInserted.Select(c => c.CustomerNumber))); 
+0

告訴我們具體出了什麼問題。 –

+1

'x.CustomerNumber'是什麼類型?您可能想要執行'lstCustomersInserted.Contains(x.CustomerNumber)' – juharr

+0

當您運行此代碼時,您的系統動態會產生一些噪音? –

回答

3

保持簡單:

var lstCustomerNumbers = lstCustomersInserted.Select(c => c.CustomerNumber);  
var res = CustomerRepository.Where(x => x.ClientId == clientId && lstCustomerNumbers.Any(c => c == x.CustomerNumber)); 
0

我認爲你有它倒退。嘗試反轉包含。

編輯:我根據評論切換到使用通用謂詞Exists而不是Contains,所以你可以匹配一個屬性。

CustomerRepository.Find(x => x.ClientId == clientId) 
      .Where(x => lstCustomersInserted.Exists(c => x.CustomerNumber == c.CustomerNumber)); 
+0

這不是'Contains'的工作方式。它應該是'lstCustomersInserted.Contains(x.CustomerNumber)'。這或將其更改爲「Any」。 – juharr

+0

固定。我只是沒有在本地運行代碼來驗證特定的方法簽名。 –

+0

注意,如果'lstCustomersInserted'是一個'List ',那麼就有一個本地的'Contains' vs使用Linq'Contains',如果它不是一個列表,那麼'Exists'將不起作用。最好使用「Contains」來涵蓋所有可能的實現。 – juharr

0

怎麼樣的Except

CustomerRepository.Select(x => x.ClientID) 
        .Except(lstCustomersInserted.Select(x => x.CustomerID)); 

這將返回在回購不中你lstCustomersInserted存在的對象的ID。