我試圖在Linq中按周分組。我創建的helper方法來定義我想通過組一週,但在運行代碼時,我得到的錯誤信息:{「法‘的Int32 GetWeekNumber(System.DateTime的)’有沒有支持轉換爲SQL」}方法在Linq中的SQL中沒有支持的翻譯
System.SystemException {} System.NotSupportedException
我的Linq查詢:
var data = from trans in _dbc.MyStuff
where
SqlMethods.Like(trans.SEGMENT2, "00601") && SqlMethods.Like(trans.SEGMENT4, "%")
&&
trans.CREATION_DATE >= new DateTime(2013, 01, 01) &&
trans.CREATION_DATE <= new DateTime(2013, 12, 31)
group trans by new
{
DateYear = (int?)trans.CREATION_DATE.Value.Year,
DateMonth = (int?)trans.CREATION_DATE.Value.Month,
DateWeek = (int?)WeekStuff.GetWeekNumber(trans.CREATION_DATE.Value)
}
into g
orderby
g.Key.DateYear,
g.Key.DateMonth,
g.Key.DateWeek
select new
{
DateYear = g.Key.DateYear ?? 0,
DateMonth = g.Key.DateMonth ?? 0,
DateWeek = g.Key.DateWeek ?? 0,
Value = g.Sum(p => p.BASE_TRANSACTION_VALUE) ?? 0,
Count = g.Sum(p => p.PRIMARY_QUANTITY) ?? 0,
DateCreated = g.Min(p => p.CREATION_DATE) ?? DateTime.Now,
Department = g.Min(p => p.SEGMENT2)
};
我的helper方法:
public static int GetWeekNumber(DateTime date)
{
if (DateTimeFormatInfo.CurrentInfo != null)
{
Calendar cal = DateTimeFormatInfo.CurrentInfo.Calendar;
return cal.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
}
return 0;
}
基本上我想要做的就是每週還要分組,如何使用helper方法進行分組(如果我實際上需要一個輔助方法來完成此操作)?
你不能在Linq中使用你的方法。您需要以某種方式將其翻譯爲SQL代碼,然後使用它 –
如果您要直接編寫SQL代碼,那麼您如何在SQL中完成這項工作?如果你能弄清楚如何做到這一點,那麼就考慮試着找到一種讓LINQ來編寫代碼的方法。如果你不能,那麼LINQ可能不能。 – Servy
謝謝你的評論傢伙。我實際上(通過幫助)管理編寫按幾周分組的sql腳本。然而,我很難將其轉換爲Linq(但在StackOverflow中這將是一個不同的問題)。再次感謝。 – gardarvalur