Linq根据另一个列表查询对象列表的结果

Mic*_*ips 3 c# linq

我有一个数字列表,如下所示:

1) List<long> list1 : 101, 102, 103
Run Code Online (Sandbox Code Playgroud)

我有一个对象列表,其中一个属性很长:

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
Run Code Online (Sandbox Code Playgroud)

我想查询第二个列表,如果它在list1中有Id.意思是我应该得到包含以下内容

SomeObject[0]  
SomeObject[1]
Run Code Online (Sandbox Code Playgroud)

尝试下面的代码没有成功:

(from t2 in list2
          where list1 .Any(t => t2.Id.Contains(t)) == true
          select t2);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Tim*_*ter 5

你可以使用Enumerable.Contains:

var query = from t2 in list2
            where list1.Contains(t2.Id)
            select t2;
Run Code Online (Sandbox Code Playgroud)

如果list1中的值是uniqe,您也可以使用更高效的 Join:

var query = from t2 in list2
            join t1 in list1
            on t2.Id equals t1
            select t2;
Run Code Online (Sandbox Code Playgroud)

你的方法不起作用:

where list1.Any(t => t2.Id.Contains(t)) == true
Run Code Online (Sandbox Code Playgroud)

因为t2.Id返回long没有Contains方法的东西.

如果你想使用Any你可以使用这个:

where list1.Any(t => t2.Id == t)
Run Code Online (Sandbox Code Playgroud)