gpt4 book ai didi

c# - 如何使用 LINQ 获取存在于一个集合中但不存在于另一个不同类型中的整数列表?

转载 作者:行者123 更新时间:2023-11-30 22:48:46 25 4
gpt4 key购买 nike

我有两个不同的集合:

List<int>
IEnumerable<IDataRecord>

第一个包含主键列表。第二个包含数据记录。我想做的是根据给定的列名确定第一个集合中的哪些主键在第二个集合中不存在,并将它们作为新集合返回。

例如,如果我有这个:

private List<int> _currentKeys = new List<int>();

public void Update(DbDataReader reader, string keyColumn) {
var records = reader.AsEnumerable(); // my own extension method
var difference = // LINQ stuff here
}

假设 _currentKeys 包含 [1, 2, 3, 4, 5] 并且 reader 在名为 ID 的列中包含值为 [1, 4, 5] 的记录.如果我调用 Update,我需要获取一个包含 [2, 3] 的集合。

一如既往,我觉得这非常简单,但是这两个集合的类型不同这一事实完全让我失望了。再加上我还没有经常使用 LINQ。

最佳答案

诀窍是在主键列表中查询您的阅读器不包含的键。 where 语句指定要比较阅读器中的哪一列。但是,它们必须是相同的数据类型。

List<int> _currentKeys = new List() { 1, 2, 3, 4, 5);

List<int> NotFound = (
from pk in _currentKeys
where !reader.Select(rec => rec.MyFieldToCompare).Contains(pk)
select pk).ToList();

如果它们的数据类型不同,只需转换内存集合以匹配数据库集合的类型。 IE 如果您的主键在数据库中保存为 varchar,您将像这样隐藏 _currentKeys:

List<string> _currentKeysStr = 
Array.ConvertAll<int, string>
(_currentKeys.ToArray(), Convert.ToString).ToList();

关于c# - 如何使用 LINQ 获取存在于一个集合中但不存在于另一个不同类型中的整数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511421/

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