如何知道两个数组相减

本文关键字:两个 数组 相减 何知道 | 更新日期: 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);