【问题标题】:Check specific column in list for duplicates, skip null or empty values检查列表中的特定列是否有重复项,跳过空值或空值
【发布时间】: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 示例

标签: c# linq


【解决方案1】:

在过滤null 或空值之前,您正在执行.GrouBy()

  1. 过滤每个元素的POSTADR 不为空的所有记录或 空的。
  2. 应用GroupBy()记录检查重复记录基于 POSTADR
  3. 再次过滤以检查每个组的Count()是否更大 是否大于 1

你的 Linq 看起来像,

 var duplicatesPOSTADR = list.AsEnumerable()
         .Where(g => !string.IsNullOrWhiteSpace(g.POSTADR)) //Filter all records where POSTADR is not null or empty
         .GroupBy(dr => dr.POSTADR.Trim())                  //GroupBy POSTADR
         .Where(gr => gr.Count() > 1)                       //Check for duplicate records
         .SelectMany(g => g)                               //Select entire object
         .ToList();                                       //Convert to List

.Net Fiddle

【讨论】:

  • 谢谢你! IsNullOrWhiteSpace 有效,IsNullOrEmpty 无效。
  • 即使在您接受后我也更新了我的答案,我涵盖了@PavelAnikhouski 提出的所有场景。这将工作没有任何错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2011-05-05
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
相关资源
最近更新 更多