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

本文关键字:列表 是否 包含 另一个 元素 一个 LINQ 中的 检查 | 更新日期: 2023-09-27 18:33:45

我有两个列表(例如):

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

我需要返回 OldID 列表,该列表仅包含第一个列表中的值。我是这样做的:

var newList = OldIDs.Where(p => p.Id.All(x => NewIDs.Contains(x.ToString()))).ToList();

但它返回count=0;

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

编辑2:它以这种方式工作:

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

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

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

使用 Enumerable.Intersect

var newList = OldIDs.Intersect(NewIDs).ToList();

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

var newList = OldIDs.Where(x => NewIDs.Contains(x.Id)).ToList();

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

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

要使用Intersect() ,请尝试以下操作:

var intersectedList = NewIDs.Intersect(OldIDs).ToList();