c# - 将带有聚合的 Linq 查询绑定到 ListView WPF C#
问题描述
我有一个类“TimePunch”,它记录每个用户的输入/输出时间配对以及一个标志级别,它继承自 INotify 并具有许多蓬松的公共获取/返回,为简单起见将省略。
{
private int ID;
private string UserID = App.Username;
private DateTime TimeIn;
private DateTime TimeOut;
private int Flag = 0; //0 = None, 1 = Manual, 2 = Edited, 3 = Unlikely, -1 = Deleted
private string Notes;
...
我将这些集合作为列表视图的基础源绑定,并有许多按钮,它们的作用类似于选项卡,以允许经理切换他们正在查看的星期几,并且有一个用于更改周末日期和过滤的控件每个用户。好的,一切都很好,花花公子。
我想要做的是将第二个 listView 绑定到一个查询,该查询通过总结每个员工每天的工作时间来显示数据源的一种“概述”。(TimePunch 的 myHoursView 返回 TimeIn/TimeOut 之间的小数小时数)
在 SQL 中,我正在寻找的伪代码类似于:
SELECT UserID,
MAX(FlagView) As Flag, --'FlagView' ignores -1 or deleted records
SUM(CASE WHEN myTimeIn.DayofWeek = DayofWeek.Monday
THEN myHoursView Else 0 END) As Monday,
SUM(CASE WHEN myTimeIn.DayofWeek = DayofWeek.Tuesday
THEN myHoursView Else 0 END) As Tuesday,
...
SUM(myHoursView) As Total
FROM PunchList
WHERE TimeIn > WeekEnding.AddDays(-7) AND
<= WeekEnding
GROUP BY UserID
有没有办法在 LINQ 中干净地做到这一点?
(实体框架是不可能的——主要是为了兼容性)
解决方案
我想你想要这样的东西:
var result = yourlist.GroupBy(
item => item.UserId,
item => item.UserId,
(key, items) => new { UserId = key,
flag = items.Any(x => x.flag),
monday = items.Where(x => x.DayOfWeek == monday).Sum(x => x.myHoursView),
// etc.
推荐阅读
- android - 从混合移动应用程序 Blazor Mobile 访问 Web API
- github-for-windows - GitHub Windows 10 不会忽略文件
- python - 使用 Pandas 和 R 将序列号连接到组中的每一行
- python - TCP服务器上的Python Telnet连接问题
- vb.net - VB.Net - 收到新电子邮件时执行我的代码
- python - 如何检测会员的自定义状态和丰富的在线游戏状态
- c++ - 连接到队列管理器 C++ 时出现 MQ 错误 2058
- python-3.x - 如何给出要在行为命令中执行的功能文件列表
- c# - 递归函数来确定所需的操作以达到给定的结果
- javascript - 我如何在谷歌应用脚本中重定向到另一个 .html