我有一个“ TimePunch”类,它记录每个用户的进/出时间配对以及一个标志级别,该标志级别继承自INotify并具有许多绒毛的公共获取/返回,为简单起见,将忽略这些信息。 / p>
{
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;
...
我将这些集合绑定为列表视图的基础源,并具有许多类似于标签的按钮,以使Manager可以切换他们正在查看的是星期几,并且可以更改周末日期和每个用户的过滤条件。好吧,一切都很好,花花公子。
我想做的是将第二个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中做到这一点?
(实体框架是不可能的,主要是为了兼容性)
答案 0 :(得分:0)
此建议是改为使用ADO.Net并调用已设置为从Azure / SQL Server返回JSON的存储过程。然后将从sproc返回的JSON反序列化为结构/实例,然后绑定到适当的listview。
For JSON Auto
返回正确的DTO /模型。XmlReader
,但它会在JSON转义时使用barfs,并且无法处理2033个字符的数据返回。 string
,它将是原始JSON。需要将其反序列化到您的列表中。完成此操作后,您可以调用您的sproc,获取正确的数据并按原样绑定该数据。
答案 1 :(得分:0)
我认为您想要这样的东西:
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.