Linq 日期轉換
應用背景
在統計每個月的消費總額時,用Linq寫表示式需要轉換日期為“yyyy-MM”對錶中的資料進行分組統計。
錯誤寫法:
var spend = from s in Db.SpendRecord
group s by FSpendDate = s.FSpendate.ToString("yyyy-MM") into g
select new {g.key.FSpendDate,TotalFigure = g.sum(s=>s.FFigure)};
複製程式碼
這樣寫會報錯誤:
LINQ to Entities不識別方法“System.StringToString()”,因為該方法無法轉換為儲存表示式。
應使用函式SqlFunctions對日期進行轉換。SqlFunctions.DateName方法 返回表示指定日期的指定日期部分的字串。
正確寫法:
var spend = from s in Db.SpendRecord
group s by FSpendDate =
SqlFunctions.DateName("yyyy",FSpendDate) + "-" +
SqlFunctions.DateName("mm",FSpendDate)
into g
select new {g.key.FSpendDate,TotalFigure = g.sum(s=>s.FFigure)};
複製程式碼
2017-August 325.00
2017-December 454.50