2017-01-19 14 views
1
の定義が含まれていません

linqでGroupByを実行する方法については、ここで他のスレッドを見てきました。私は他の人のために働いたEXACT構文に従っていますが、うまくいきません。IGroupingには

はここにクエリです:

var results = from p in pending 
       group p by p.ContactID into g 
       let amount = g.Sum(s => s.Amount) 
       select new PaymentItemModel 
       { 
        ContactID = g.ContactID, // <--- Error here 
        Amount = amount 
       }; 

pendingが、他の列の中で、ContactIDAmountが含まれているList<T>であるが、それらは私がこのクエリの気に2つだけです。

問題は、select newの中で、g.は私に元のリストの中の列、pendingを与えません。そして、私がしようとしたときに、私が取得:

<int, LeadPurchases>は、ContactIDの定義、および拡張子なしの方法何とか何とか何とかが含まれていませんIGrouping ...

は、これは私がエミュレートしようとしているSQLです。

SELECT 
    lp.PurchasedFromContactID, 
    SUM (lp.Amount) 
FROM 
    LeadPurchases lp 
GROUP BY 
    lp.PurchasedFromContactID 
+0

あなたは 'g.Key.ContactID'を望むでしょう – Rob

+0

それは私を得ます:intはContactIDの定義を含んでいません –

+3

申し訳ありません - まっすぐ考えるのではありません。これは単純に 'ContactID = g.Key'でなければなりません。なぜなら、単一の値でグルーピングしているからです。 – Rob

答えて

4

あなたはContactIDに基づいてグループ分けされているので、それは結果のためのキーである必要があり、それで、あなたはg.ContactIDのための代わりにg.Keyを使用する必要があります。

group p by new 
{ 
    p.ContactID, 
    p.Field2, 
    p.Field3 
}into g 
select new PaymentItemModel() 
{ 
    ContactID = g.Key.ContactID, 
    anotherField = g.Key.Field2, 
    nextField = g.Key.Field3  
}; 
:あなたはGROUPBY句は次のようになります複数の列に基づいてグループ分けを実行したい場合は

from p in pending 
       group p by p.ContactID into g 
       let amount = g.Sum(s => s.Amount) 
       select new PaymentItemModel 
       { 
        ContactID = g.Key, 
        Amount = amount 
       }; 

アップデート:これは、クエリは次のようにする必要があります意味します

+0

これは有望です!私はいくつかのテストを実行し、報告する。ありがとうございました! –

+0

@CaseyCrookston:クールなハッピーコーディング –

+0

おい、それはうまくいった! 3分でこれを答えとしてマークすることができます。その間、私はこれが私の仕事に加えられていることを知っていますが、もっと列でグループ化したいのですが? ContactIDに加えて、1つ以上の列でグループ化すると、どのように表示されるかを示す答えを追加することをお勧めしますか? –

関連する問題