【发布时间】:2020-06-03 12:40:01
【问题描述】:
我正在检查列表中的特定列是否存在重复值。列表最初来自数据库,对于某些客户,KONSERNI 列是空的。因此,此列中的某些值是 null/empty = 无值。当前代码认为这些 null/empty 是重复的。执行 linq 查询时如何跳过空值?
var duplicatesKonserni = results.AsEnumerable()
.GroupBy(dr => dr.KONSERNI.Trim())
.Where(g => g.Count() > 1)
.SelectMany(g => g)
.ToList();
我试过了:
var duplicatesKonserni = results.AsEnumerable()
.GroupBy(dr => dr.KONSERNI.Trim())
.Where(g => g.Count() > 1 && g != null)
.SelectMany(g => g)
.ToList();
没有错误,但结果与提供的第一个代码相同。空值仍在输出列表中?
编辑:
这里是完整的测试代码:https://dotnetfiddle.net/saRl3G
输出应该是:
{ NAME = Fiat, MODEL = Punto, NAMEB = 500, POSTADR = P4 }
{ NAME = BMW, MODEL = E64, NAMEB = SE0, POSTADR = P4 }
不像现在这样:
{ NAME = Fiat, MODEL = Punto, NAMEB = 500, POSTADR = P4 }
{ NAME = BMW, MODEL = E64, NAMEB = SE0, POSTADR = P4 }
{ NAME = LADA, MODEL = S23, NAMEB = S1D3, POSTADR = }
{ NAME = Bugatti, MODEL = PO2, NAMEB = SQ4, POSTADR = }
【问题讨论】:
-
在
GroupBy之前尝试使用Where -
另外,尝试在
null字符串上调用Trim()可能会导致异常,因此您应该在GroupBy之前使用.Where(dr => !string.IsNullOrEmpty(dr.POSTADR)),根据您的dotnetfiddle 示例