我有一个以下列表项,我想删除ClassName
和StartDate
相同的类。我要删除Status
为“旧”的项目。
CourseId ClassName StartDate Status
-------- -------- -------- ---------
12321 Math 08-25-2017 New
14321 Math 08-25-2017 Old
13221 Math 08-25-2017 Old
32342 Physics 08-25-2017 New
34345 Math 08-25-2017 New
25325 Math 01-25-2018 New
45329 Math 01-25-2018 Old
33325 Chemistry 01-25-2018 New
44345 Chemistry 01-25-2018 Old
例如,下面有两个数学课程的开始日期是相同的,但是我要删除第二个和第三个,因为状态是旧的,并且想要保留第一个和第三个,状态是新的。
12321 Math 08-25-2017 New
14321 Math 08-25-2017 Old
13221 Math 08-25-2017 Old
尝试按如下所示根据日期和类名对它们进行分组,但是我仍然无法从每个组中删除项目。
List<Course> courses = allCourses
.Where()
.OrderByDescending(x=> x.StartDate)
.GroupBy(x => x.StartDate && x.ClassName)
.FirstOrDefault()?.ToList()
答案 0 :(得分:0)
由于您的原始数据在一个组中可能有多个“新”项目,因此我选择了所有“新”项目。
首先,您按StartDate
和ClassName
分组。请注意,对多个值进行分组的正确语法是创建一个匿名对象。
然后您对结果进行排序-不能认为在分组依据之前进行排序。
然后,对于每个结果组,如果课程多于一门,则选择所有状态为“新建”的课程,否则,选择一门课程。
var courses = allCourses.GroupBy(c => new { c.StartDate, c.ClassName })
.OrderByDescending(cg => cg.Key.StartDate)
.SelectMany(cg => cg.Where(c => cg.Count() == 1 || c.Status == "New").Select(c => new { c.CourseId, cg.Key.ClassName, cg.Key.StartDate, c.Status }));