LINQ:如何执行条件和?
我有一个LINQ查询,它创建了一个新类型,其中包含一周的天数和工作小时数。 我当前的(错误查询)如下所示:LINQ:如何执行条件和?,linq,Linq,我有一个LINQ查询,它创建了一个新类型,其中包含一周的天数和工作小时数。 我当前的(错误查询)如下所示: var resultSet = (from a in events group a by a.Start.DayOfWeek into g select new DaySummary { day = g.Key.ToString(),
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
目前我还不太明白这种逻辑
更新
好吧,我是个白痴。将查询更改为此,现在即可工作。对不起
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();
似乎每个组都是一系列的“时段”,你只想在每次计算中忽略任何“午餐”时段。在这种情况下,您只需要使用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();