我有一个字符串数组:
private static string[] dataNames = new string[] { "value1", "value2", ..... "value56" };
我的SQL数据库中有一个表,其中包含一个类型为VARCHAR
的列我想知道数组中存在哪些值,但该列中不存在。
var matchingRows = dt.AsEnumerable()
Where(row => dataNames.Contains(row.Field<string>("ColumnName"), StringComparer.OrdinalIgnoreCase));
其中dt
是dataTable,其中包含此查询的结果:
SELECT * FROM table name
现在我在matchingRows
变量中有匹配的值,我可以使用g ToArray()
将其传输到数组
现在我仍然需要知道如何从dataNames
中减去matchingRows
数组,以便知道数组中存在哪些值,而不是在表列中退出。
答案 0 :(得分:2)
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);
答案 1 :(得分:2)
从表中选择此列的所有值,然后使用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);