2012-06-29 109 views
4

我在我的表中的列稱爲Date,我需要比較這個日期的WeekOfTheYearDateTime.NowWeekOfTheYearGetWeekOfYear實體框架

如果我給這樣的,

var cal = CultureInfo.CurrentCulture.Calendar; 

int week = cal.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); 

我我在這裏得到26。用同樣的方法,在我的實體框架,我需要比較這一週的數據,爲了這個,我試過像,

entities.WorkingDays.Where(a => 
      cal.GetWeekOfYear(a.DATE,CalendarWeekRule.FirstDay,DayOfWeek.Sunday) 
      == cal.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, 
               DayOfWeek.Sunday) 

當我運行這樣的查詢,我得到的錯誤一樣,

「 LINQ to Entities不識別方法'Int32 GetWeekOfYear (System.DateTime,System.Globalization.CalendarWeekRule,System.DayOfWeek)' 方法,並且此方法無法轉換爲存儲表達式。「

我怎樣才能獲取數據每週在這裏,任何一個可以幫助我在這裏....在此先感謝

+0

我認爲這將[不可能](http://stackoverflow.com/questions/4538995/linq-to-entities-does-not-recognize-the-method)與LINQ到實體[此外這個](http://stackoverflow.com/questions/880011/entity-framework-all-method) – V4Vendetta

+0

@ V4Vendetta:謝謝你的回覆, – shanish

+0

這僅僅是今年或者所有年份的本週數字嗎?如果僅僅是今年或少數幾年,而不是測試LINQ中的星期數,則可以使用C#計算那一週的開始和結束日期,然後與LINQ查詢中的日期範圍進行比較。 – Rup

回答

2

呼叫.ToList()第一。像這樣:

entities.WorkingDays.ToList().Where(a => 
      cal.GetWeekOfYear(a.DATE,CalendarWeekRule.FirstDay,DayOfWeek.Sunday) 
      == cal.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, 
               DayOfWeek.Sunday) 

請參閱this發佈重複問題。基本上,在使用GetWeekOfYear函數之前,數據需要在內存中。

正如評論中指出的那樣,這確實將整個「WorkingDays」錶帶入內存,因此從數據庫中獲取比需要更多的數據。有時候,這比使用存儲過程更好,有時候不會,這取決於基於應用程序/數據庫體系結構的數據量和其他因素。

+0

我會盡量讓你知道,謝謝你的回覆 – shanish

+0

沒問題,幾天前我碰到了這個。 –

+2

請注意,這意味着您要從數據庫中加載表格,然後對其進行過濾,而不是在數據庫端對其進行過濾,而這會降低效率,並且使其他操作效率降低。 – Rup

0

您可能可以使用一年中的每一天,並在兩個實例中將其除以7,並獲得足夠的結果?

Date.DayOfYear/7 
+0

我不認爲這個轉換是ISO週中涉及的直接轉換,但對於更簡單的事情來說,這可能會起作用。 –