2012-01-12 13 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の 'sum'で行ったのと同じことをしたいだけですが、集約ではなく最初の要素がほしいだけです。

私は何を見落としましたか?

答えて

1

私はLINQ(EF、NHibernate、LINQ to 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

+1

オブジェクトがメモリ内にある場合は、エラーの原因となるものがわかりません。あなたはあなたが得た完全な例外(内部例外を含む)を使って質問を編集できますか? –

+0

私はあなたの最初のポイントを取って 'firstordefault'を 'max'に変更することでこれを解決しました。これはうまくいきます。どうもありがとう。 – Glinkot