gpt4 book ai didi

c# - 检查一个列表元素中的元素是否存在于另一列表中

转载 作者:行者123 更新时间:2023-12-02 18:25:58 25 4
gpt4 key购买 nike

我有 2 个 C# 类 -

class ABC
{
string LogId;
string Name;
}

class XYZ
{
string LogId;
string Name;
}

class Checker
{
public void comparelists()
{
List<ABC> lstABC =new List<ABC>();
lstABC.Add(new ABC...);
lstABC.Add(new ABC...);
lstABC.Add(new ABC...);

List<XYZ> lstXYZ =new List<XYZ>();
lstXYZ.Add(new XYZ...);
lstXYZ.Add(new XYZ...);
lstXYZ.Add(new XYZ...);

var commonLogId = lstABC
.Where(x => lstXYZ.All(y => y.LogId.Contains(x.LogId)))
.ToList();


}
}

从代码中可以看出,我想从 lstABC 中获取 lstXYZ 中存在的所有 logid。

例如。 lstABC 有 ->

LogId="1", Name="somename1"
LogId="2", Name="somename2"
LogId="3", Name="somename3"
LogId="4", Name="somename4"
LogId="5", Name="somename5"

lstXYZ 有 ->

LogId="1", Name="somename11"
LogId="2", Name="somename22"
LogId="3", Name="somename33"
LogId="8", Name="somename8"
LogId="9", Name="somename9"

那么 lstXYZ 中存在的来自 lstABC 的所有 logid 都是 - 1,2,3 ;因此预计会获取所有这些记录。

但是使用下面的 linq 查询 -

var commonLogId = lstABC
.Where(x => lstXYZ.All(y => y.LogId.Contains(x.LogId)))
.ToList();

正在获取/选择 0 条记录。

最佳答案

使用Any()的方法

var res = lstABC.Where(x => (lstXYZ.Any(y => y.LogId == x.LogId))).Select(x => x.LogId);

https://dotnetfiddle.net/jRnUwS


另一种方法是Intersect(),这对我来说更自然

var res = lstABC.Select(x => x.LogId).Intersect(lstXYZ.Select(y => y.LogId));

https://dotnetfiddle.net/7iWYDO

关于c# - 检查一个列表元素中的元素是否存在于另一列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70155459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com