我有一个LINQ查询,它创建一个包含星期几和工作小时数的新类型。 我当前的(不正确的查询)如下所示:
var resultSet = (from a in events
group a by a.Start.DayOfWeek into g
select new DaySummary
{
day = g.Key.ToString(),
hoursWorked = g.Any(p => p.Title == "Lunch") ? 0 :
Math.Round((g.Sum(
p => (Decimal.Parse((p.End - p.Start).TotalMinutes.ToString()))) / 60), 2)
}).ToList();
希望你能看到我想做的事情。然而,任何方法都没有我想要的效果。基本上我想总结工作时间,但如果标题是“午餐”,我希望它添加0。
此时的逻辑只是我的一点点。
UPDATE 好吧,我是个白痴。将查询更改为此,现在可以正常工作。遗憾。
var resultSet = (from a in events
group a by a.Start.DayOfWeek into g
select new DaySummary
{
day = g.Key.ToString(),
hoursWorked = Math.Round((g.Where(p => p.Title !="Lunch").
Sum(p => (Decimal.Parse((p.End - p.Start).TotalMinutes.ToString()))) / 60), 2)
}).ToList();
答案 0 :(得分:1)
似乎每个组都是一系列“句点”,您只想忽略每个计算中的任何“午餐”时段。在这种情况下,您只需要使用Where。
从总和中删除这些var hours = events
.GroupBy(e => e.Start.DayOfWeek)
.Select(g => new DaySummary {
day = g.Key.ToString(),
hoursWorked = Math.Round(
g.Where(p => p.Title != "Lunch")
.Sum(pd => (Decimal.Parse((pd.End - pd.Start).TotalMinutes.ToString())) / 60), 2)
}).ToList();