如何知道两个数组相减
本文关键字:两个 数组 相减 何知道 | 更新日期: 2023-09-27 18:17:20
我有一个字符串数组:
private static string[] dataNames = new string[] { "value1", "value2", ..... "value56" };
我的SQL数据库中有一个表,它包含一个列,它的类型是VARCHAR
我想知道哪些值存在于数组中,哪些值不存在于该列中。
What I tried
var matchingRows = dt.AsEnumerable()
Where(row => dataNames.Contains(row.Field<string>("ColumnName"), StringComparer.OrdinalIgnoreCase));
其中dt
是包含此查询结果的数据表:
SELECT * FROM table name
现在我在matchingRows
变量中有了matchingValues我可以使用ToArray()
现在我仍然需要知道如何从matchingRows
中减去dataNames
数组,以便知道哪些值存在于数组中并且不退出表列。
你能帮我解决那个问题吗
选择表中该列的所有值,然后使用Except()方法。
var matchingRows = dt.AsEnumerable()
.Where(row => dataNames.Contains(row.Field<string>("ColumnName"), StringComparer.OrdinalIgnoreCase))
.Select(row => row.Field<string>("ColumnName"));
var diff = dataNames.Except(matchingRows, StringComparer.OrdinalIgnoreCase);
使用Enumerable.Except
var columnData = matchingRows.Select(row => row.Field<string>("ColumnName"));
var diff = dataNames.Except(columnData);
为了执行不区分大小写的比较,您需要将IEqualityComparer<string>
的实例传递给Except
。通常,您必须自己实现这个接口,但幸运的是,StringComparer
提供了一些开箱使用的自定义字符串比较器。
var diff = dataNames.Except(columnData, StringComparer.InvariantCultureIgnoreCase);