如何从可观察集合中筛选重复记录
本文关键字:筛选 记录 集合 观察 | 更新日期: 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();