LINQ in C#.检查一个列表是否包含另一个列表中的元素

Mia*_*Mia 3 c# linq

我有两个列表(例如):

var NewIDs = new List<string>();
NewIDs.AddRange(...some values...);

var OldIDs = new List<some type>()
OldIDs.AddRange(...some values...);
Run Code Online (Sandbox Code Playgroud)

我需要返回OldIDs列表,它只包含第一个的值.我是这样做的:

var newList = OldIDs.Where(p => p.Id.All(x => NewIDs.Contains(x.ToString()))).ToList();
Run Code Online (Sandbox Code Playgroud)

但它回来了 count=0;

编辑1: NewIDs它只是字符串列表,但OldIDs它是一些结构,具有Id属性

编辑2:它的工作方式如下:

var newList = new List<MyType>();
 foreach (var res in NewIDs)
   {
     newList.AddRange(OldIDs.Where(a => a.Id == res));
   }
Run Code Online (Sandbox Code Playgroud)

我需要在没有foreach使用的情况下重写它LINQ

Tim*_*ter 10

用途Enumerable.Intersect:

var newList = OldIDs.Intersect(NewIDs).ToList();
Run Code Online (Sandbox Code Playgroud)

如果OldIDs包含具有Id属性的自定义对象:

var newList = OldIDs.Where(x => NewIDs.Contains(x.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)

另一种可能更有效的方法Join:

var oldInNew = from old in OldIDs
               join newID in NewIDs 
               on old.Id equals newID
               select old;
var newList = oldInNew.ToList();
Run Code Online (Sandbox Code Playgroud)