[英]LINQ sum of column values excluding weekends
I'm trying to calculate the hours that fall during the week at a different rate than the ones worked during the weekend.我试图计算一周中的工作时间与周末工作的时间不同。 This is how I was hoping to accomplish it:
这就是我希望实现它的方式:
private void SetTotalCharge()
{
int.TryParse(MDate.ToString("MM"), out int month);
int.TryParse(MDate.ToString("yyyy"), out int year);
TotalCharge =
Decimal.Round(Convert.ToDecimal(db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & (a.Date.DayOfWeek != DayOfWeek.Saturday && a.Date.DayOfWeek != DayOfWeek.Sunday))
.Select(a => a.RepairHours).Sum() * RateWeek
+ db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & (a.Date.DayOfWeek == DayOfWeek.Saturday && a.Date.DayOfWeek == DayOfWeek.Sunday))
.Select(a => a.RepairHours).Sum() * RateWeekend), 2, MidpointRounding.AwayFromZero);
}
The error I'm getting:我得到的错误:
System.NotSupportedException: "The specified type member 'DayOfWeek' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."
How can I get around this?我怎样才能解决这个问题?
The DayOfWeek enum does not exist on the server side.服务器端不存在 DayOfWeek 枚举。 Try this using the
Contains
or Any
operator:尝试使用
Contains
或Any
运算符:
Side note, I think your weekend predicate should be OR as opposed to AND: (a.Date.DayOfWeek == 0 || a.Date.DayOfWeek == 6)
.旁注,我认为您的周末谓词应该是 OR 而不是 AND:
(a.Date.DayOfWeek == 0 || a.Date.DayOfWeek == 6)
。
private void SetTotalCharge()
{
var weekends = new[] {(int)DayOfWeek.Saturday, (int) DayOfWeek.Sunday}.ToArray();
int.TryParse(MDate.ToString("MM"), out int month);
int.TryParse(MDate.ToString("yyyy"), out int year);
TotalCharge =
Decimal.Round(Convert.ToDecimal(db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & !weekends.Contains(a.Date.DayOfWeek))
.Select(a => a.RepairHours).Sum() * RateWeek
+ db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & weekends.Contains(a.Date.DayOfWeek))
.Select(a => a.RepairHours).Sum() * RateWeekend), 2, MidpointRounding.AwayFromZero);
}
Or或者
private void SetTotalCharge()
{
int.TryParse(MDate.ToString("MM"), out int month);
int.TryParse(MDate.ToString("yyyy"), out int year);
TotalCharge =
Decimal.Round(Convert.ToDecimal(db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & (a.Date.DayOfWeek != 0 && a.Date.DayOfWeek != 6))
.Select(a => a.RepairHours).Sum() * RateWeek
+ db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & (a.Date.DayOfWeek == 0 || a.Date.DayOfWeek == 6))
.Select(a => a.RepairHours).Sum() * RateWeekend), 2, MidpointRounding.AwayFromZero);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.