如何从可观察集合中筛选重复记录

本文关键字:筛选 记录 集合 观察 | 更新日期: 2023-09-27 18:28:30

当前,我正在使用带有单个字段的Group By从可观察集合中筛选重复记录。问题1:

我过滤记录的当前代码

if (param.ToString() == "Name")
        duplicates = AllCollection != null
                         ? AllCollection .GroupBy(g => g.Name).Where(w => w.Count() > 1).OrderBy(o => o.Key).Select(s => s).ToList() :
                         Collection.GroupBy(g => g.Name).Where(w => w.Count() > 1).OrderBy(o => o.Key).Select(s => s).ToList();
else if (param.ToString() == "Company")
      duplicates = AllCollection != null
                          ? AllCollection .GroupBy(g => g.CompanyName).Where(w => w.Count() > 1).OrderBy(o => o.Key).Select(s => s).ToList() :
                          Collection.GroupBy(g => g.CompanyName).Where(w => w.Count() > 1).OrderBy(o => o.Key).Select(s => s).ToList();

但是使用这个,我需要使用else-if来过滤所有字段。任何其他方法都可以在不使用这个大代码的情况下完成。。

问题2:

此外,我还想筛选具有多个字段的记录E.g通过Name和CompanyName,结果将是具有相同名称和公司名称的Records。那么,我可以将哪个Linq表达式传递到GroupBy子句中呢?

提前谢谢。

如何从可观察集合中筛选重复记录

我已经解决了我的问题,只需在grouping子句中检查值是否为null,如果集合中的值为null,则分组为null,然后移动到检查下一个字段,如果值不为null,那么用字段分组。

duplicates = AllCollection != null
                             ? AllCollection.GroupBy(g => new {Name =IsNameChecked && Name!=null ?g.Name:null}).Where(w => w.Count() > 1).OrderBy(o => o.Key).Select(s => s).ToList() :
                             Collection..GroupBy(g => new {IsNameChecked && Name!=null ?g.Name:null}).Where(w => w.Count() > 1).OrderBy(o => o.Key).Select(s => s).ToList();