web-dev-qa-db-ja.com

Linq to SQLで合計とグループ化?

Linq to SQLを使い始めたばかりなので、初心者の質問は許してください。 Linq to SQL(VB.NET)で次の(機能する)クエリを再現しようとしています。

Select
    f.Title,
    TotalArea = Sum(c.Area)
From Firms f
Left Join Concessions c on c.FirmID = f.FirmID
Group By f.Title
Order by Sum(c.Area) DESC

(会社には多くの譲歩があり、譲歩には1ヘクタールの面積があります。すべての譲歩の合計面積が最も大きい会社から始めて、会社のリストが必要です。)

私はこのようなものをLinq to SQLの同等物として想像しています(pseudo-code

From f As Firm In Db.Firms _
Order By f.Concessions.Sum(Area)

...しかし、それは正しくありません。誰かが私を正しい方向に向けることができますか?

17
Herb Caudill

回答

これが正しいLinq to SQLの等価物です

From c In Concessions _
Join f In Firms on f.FirmID equals c.FirmID _
Group by f.Title _
Into TotalArea = sum(c.OfficialArea)  _
Order by TotalArea Descending _
Select Title, TotalArea

LinqPad を教えてくれた@CMSに感謝します。なんて素晴らしいツールでしょう。あなたはそれをあなたのデータベースに向けるだけで、あなたはオフで稼働しています。何百ものサンプルが含まれているだけでなく、含まれているライブデータベースに対しても実行できます。提供されたサンプルから数分で上記のクエリに到達できました。

28
Herb Caudill

ここ 集計関数とグループ化の使用に関する多くの例を見つけることができ、さらに私はあなたに非常にお勧めします LinqPad 、その場でクエリをテストするための優れたツールであり、非常に優れていますLINQを学ぶ方法として、200のサンプルがプリロードされています。

6
CMS