我有一个通用列表:
List<Test> lstReport = new List<Test>();
lstReport.Add(new Test { ID = 1, Category = "Hot work", Approver = "Praveen" });
lstReport.Add(new Test { ID = 1, Category = "Civil work", Approver = "Praveen" });
lstReport.Add(new Test { ID = 1, Category = "Others", Approver = "Praveen" });
lstReport.Add(new Test { ID = 4, Category = "Hot work", Approver = "Praveen" });
lstReport.Add(new Test { ID = 5, Category = "Critical work", Approver = "Praveen" });
现在我想通过ID值从通用列表中获取唯一的行。 例如,我需要对具有相同 ID 的行进行分组,如果 ID 存在多次,则其类别字段必须为改为“ Grouped ”。
我该如何写这个表达式?
答案 0 :(得分:1)
List<Test> lstReport = new List<Test>();
...
var groups = lstReport.GroupBy(i => i.ID).ToList();
foreach(var group in groups) {
var items = group.ToList();
if(items.Count > 1)
items.ForEach(i => { i.Category = "Grouped"; });
}
答案 1 :(得分:1)
此作品
var QueryResult = (from x in lstReport
group x by x.ID into res
select new Test
{
ID = res.Key,
Category = res.Count() > 1 ? "Grouped" : res.First().Category,
Approver = res.First().Approver
}).ToList();
答案 2 :(得分:0)
你可以试试这个
var q = from r in lstReport
group r by r.ID into g
select new Test{ID=g.Key, Category = g.Count()>1? "Grouped" : g.Min(Category)};
你也可以拥有g.Max(...)或g.Min(...)
答案 3 :(得分:0)
您可以使用Linq根据某些属性对对象进行分组:
var list = lstReport.GroupBy(t => t.ID);
这将返回包含3个项目的新集合:IEnumerable<IGrouping<TKey, TSource>>
;这基本上是指包含具有一个或多个项目的集合的集合。
然后你可以遍历那个新的集合并检查每个项目是否包含多个子项目;如果是,则迭代子项并修改Category值。
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupby(v=vs.110).aspx