c# - 在 C# 中需要有关 Linq 过滤的帮助

标签 c# linq

我有一个名为 HourList 的集合,它由 Hour 对象组成。 Hour 的两个属性是 EmployeeId 和 Hours。员工打卡打卡并创建小时记录。因此,在一周结束时,我收到了来 self 们 DAO 的多名员工的多个 Hour 对象的 HourList。要求制作一份报告,其中仅显示总时数超过给定阈值的员工。

示例:一个简单扁平化的 HourList

Id | Hours
----------
1  | 4.5
2  | 6.0
3  | 9.9
1  | 5.5
2  | 2.5

阈值是 10。在这种情况下,我只想要 Id 1 的小时记录,因为他的总小时数超过 10。

我知道我可以通过创建一个新的 DAO 方法来处理这个问题,当我返回初始的 HourList 时。我也可以使用 foreach 语句非常低效地执行此操作。不过,我正在尝试使用 Linq 变得更好,并且想看看有什么可能。提前感谢您的帮助。

最佳答案

var filtered = HourList.GroupBy(h => h.id)
                       .Select(g => new { Id = g.Key,
                                          Hours = g.Sum(h => h.Hours)
                                        })
                       .Where(h => h.Hours >= 10);

无法测试,但这应该能让你接近。

关于c# - 在 C# 中需要有关 Linq 过滤的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345526/

相关文章:

c# - LINQ to Entities 无法识别该方法

C# Winforms datagridview 列标题文本

c# - 在 ASP.NET MVC 中跟踪 LINQ TO SQL 生成的查询

c# - 集合在 asp.net MVC 4 中被修改错误

c# - 在处理不可为空类型的空值的 setter 上停止 C# 警告 "Possible Null Reference Assignment"

sql - LinqPad - 编写 SQL 并将其转换为 Linq Lambda

c# - LINQ to Entities Union 抛出错误

c# - 从字符串创建匿名类型

c# - 使用LINQ排序对象的不同属性

c# - 使用 LINQ To NHibernate 按具有全部最大值的可变上限值分组