目前,我正在使用具有单个字段的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?
提前致谢。
答案 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();