0

目前我正在使用带有单个字段的 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:

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

提前致谢。

4

1 回答 1

0

我已经解决了我的问题,只是在分组子句中检查值是否为空,如果集合中的值为空,则分组为空并移动以检查下一个字段,如果值不为空,则按字段分组。

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();
于 2013-08-22T10:07:09.647 回答