我試圖計算一周中的作業時間與周末作業的時間不同。這就是我希望實作它的方式:
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);
}
我得到的錯誤:
System.NotSupportedException: "The specified type member 'DayOfWeek' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."
我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
DayOfWeek服務端不存在列舉,這是例外的根本原因。以下是解決問題的兩種解決方法。第一個使用作業日序數串列(0 和 6),第二個直接在條件中檢查序數(類似于您的原始方法)。
下面的示例適用于物體框架。DbFunctions.DiffDays對于 EFCore 支持,使用和EF.Functions.DateDiffDay作為各自的標準進行查找和替換。
private void SetTotalCharge()
{
var dateTime = new DateTime(1899, 12, 31);
var weekends = new List<int>{ 0, 6 };
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.Any(r => r == DbFunctions.DiffDays(dateTime, a.Updated) % 7))
.Select(a => a.RepairHours).Sum() * RateWeek
db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & weekends.Any(r => r == DbFunctions.DiffDays(dateTime, a.Updated) % 7))
.Select(a => a.RepairHours).Sum() * RateWeekend), 2, MidpointRounding.AwayFromZero);
}
或者
private void SetTotalCharge()
{
var dateTime = new DateTime(1899, 12, 31);
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 & ((DbFunctions.DiffDays(dateTime, a.Date) % 7) != 0 && (DbFunctions.DiffDays(dateTime, a.Date) % 7) != 6))
.Select(a => a.RepairHours).Sum() * RateWeek
db.MyTable
.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month & (a.Date.Year) == year & ((DbFunctions.DiffDays(dateTime, a.Date) % 7) == 0 || (DbFunctions.DiffDays(dateTime, a.Date) % 7) == 6))
.Select(a => a.RepairHours).Sum() * RateWeekend), 2, MidpointRounding.AwayFromZero);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510624.html
上一篇:物件C#MVC解決方案的透視表
