我有一个数字列表,如下所示:
1) List<long> list1 : 101, 102, 103
我有一个对象列表,其中一个属性很长:
2) List<SomeObject> list2:
SomeObject[0]- (long)Id : 101,
Name: Adam,
Address:xxx
SomeObject[1]- (long)Id : 102,
Name: Bran,
Address:xxx
SomeObject[2]- (long)Id : 109,
Name: Queen,
Address:yyy
如果列表1中存在Id,我想查询第二个列表。意思是我应该得到包含以下内容的列表:
SomeObject[0]
SomeObject[1]
尝试下面的代码但没有成功:
(from t2 in list2
where list1 .Any(t => t2.Id.Contains(t)) == true
select t2);
提前致谢。
答案 0 :(得分:5)
您可以使用Enumerable.Contains
:
var query = from t2 in list2
where list1.Contains(t2.Id)
select t2;
如果list1中的值为uniqe,您也可以使用more efficient Join
:
var query = from t2 in list2
join t1 in list1
on t2.Id equals t1
select t2;
您的方法不起作用:
where list1.Any(t => t2.Id.Contains(t)) == true
因为t2.Id
返回没有long
方法的Contains
。
如果您想使用Any
,可以使用此功能:
where list1.Any(t => t2.Id == t)
答案 1 :(得分:1)
您的查询存在的问题是,您尝试在Contains
上致电long
。相反它应该是list1 .Any(t => t2.Id == t)
。但相反,你可以加入。
from t1 in list1
join t2 in list2 on t1 equals t2.Id
select t2
答案 2 :(得分:1)
您还可以使用以下代码段来获得所需的结果,其中
var result = list2.Where(l2 => list1.Any(l1 => l1 == l2.Id));