2012-01-12 38 views
3

我有以下,直到我說的最後一部分一直很好:LINQ的「第一」的問題

var FbtTotals = from ff in ExpenseItemFbtItems 
       group ff by ff.ERLineID into g 
       select new { 
        lineId = g.Key, totalAttendees = g.Sum(
        m => m.Num_Attendees_In_Group), 
        attendeeTypes = g.Count(), 
        purposeDesc = g.FirstOrDefault(n => n.User_Purpose_Description) 
       }; 

的purposeDesc失敗,稱這是一個未知的錯誤。在功能上,我只想做我與totalAttendees的「和」做同樣的事情 - 但我只是想的第一個元素,而不是聚集。

我有什麼忽略了?

回答

1

我假設你在使用LINQ(EF,NHibernate的,LINQ到SQL等)一起使用ORM。 ORM不支持集合上的窗口函數(這是翻譯你的查詢所需要的);他們只支持聚合。

爲了做到你想要什麼,你就必須獲取的所有記錄在您的查詢,然後在客戶端代碼構建你的最終目標(獲得的第一項)。鑑於你似乎沒有過濾任何東西,你可以試試這個:

var FbtTotals = from ff in ExpenseItemFbtItems.AsEnumerable() 
          group ff by ff.ERLineID into g 
      select new { lineId = g.Key, totalAttendees = g.Sum(m => m.Num_Attendees_In_Group), attendeeTypes = g.Count(), purposeDesc = g.FirstOrDefault(n => n.User_Purpose_Description) }; 
+0

嗨,亞當。其實這些對象目前在內存中,但在某些時候,我可能會用EF代替。 – Glinkot 2012-01-12 02:59:45

+1

如果在內存中的對象,那麼我不知道什麼可能會導致錯誤。你能用你得到的完全例外(包括任何內部例外)來編輯你的問題嗎? – 2012-01-12 03:02:51

+0

我已經把你的第一個點,並改變「firstordefault」到「最大」的正常工作解決了這一點。非常感謝。 – Glinkot 2012-01-12 03:06:40