LINQ:如何执行条件求和?

时间:2010-01-28 11:55:28

标签: linq

我有一个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();

1 个答案:

答案 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();