2013-04-09 112 views
2

我在這種情況下。我有兩個不同對象類型的列表,它們都有一個共享屬性值。假設它是invoiceIDC#Lambda表達式的SQL [IN]語句等價於什麼?

在SQL中,如果我想從table_A抓住所有記錄中的,它有列invoiceID價值的比賽裏面table_B任何invoiceId,我可能會做這樣的事情。

Select * 
From table_A 
where invoiceID in (select invoiceId from table_B) 

在這種情況下,C#中的等效LINQ或Lambda表達式是什麼?

我用於搜索使用單個值列表中的元素如:

var result = list_A.Where(x=>x.InvoiceID = someInvoiceID) 

.contains()代替。

但是,這可能只包含一個invoiceID值。

我想,我可以在list_B上運行每個invoiceID的循環,然後將結果存儲在另一個列表中,但我只是想知道是否有更好的方法來做到這一點?

+0

會不會從問題[鏈接](http://stackoverflow.com/questions/7918217/linq-lambda-equivalent-of-sql-in)打算對於電影已經是價值清單的情況?我的問題是,我會在Movies對象內進行拍攝。因此,我無法這樣做,其中(x => Movies.Contains(x.Value))和.Where(x => Movies.MovieRatings.Contains(x.value)),其中Movies是列表()。也許我在這裏做錯了什麼? – frostshoxx 2013-04-09 19:22:08

回答

4

下面的代碼應該工作:

var someInvoiceList = new int[] {1, 2, 3}; 
var result = list_A.Where(x => someInvoiceList.Contains(x.InvoiceID)); 
+0

謝謝你的建議。如果不是將someInvoiceList作爲一個數據數組,而是使用someObjectList,那麼invoice就是這個列表中對象的屬性? – frostshoxx 2013-04-09 19:28:22

+0

啊我很傻,我可以先從ObjectB列表中創建一個數組或列表中的發票,然後按照上面的步驟進行操作。 謝謝! – frostshoxx 2013-04-09 19:46:13

+1

就像這樣:var list = new List (); var someInvoiceList = list.Select(x => x.id) – 2013-04-09 19:48:11