2013-04-09 91 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