如何从可观察集合中过滤重复记录?

时间:2013-08-22 04:45:13

标签: c# wpf linq-to-sql group-by observablecollection

目前,我正在使用具有单个字段的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,如果对于所有字段进行过滤。 没有使用这个大代码的任何其他方法..

Que 2:

此外,我想过滤多个字段的记录 例如 传递Name和ComapnyName,结果将是具有相同名称和公司名称的记录。 那么Linq表达式可以传递给Group-By Clause?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题,只是在grouping子句中检查value是否为null,如果value值在collection中为null,则grouping为null并移动以检查下一个字段,如果value不为null,则group-by with field

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();