views:

16483

answers:

4

Just getting started with Linq to SQL so forgive the newbie question. I'm trying to reproduce the following (working) query in 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

(A Firm has many Concessions; a Concession has an area in hectares. I want a list of Firms starting with the ones that have the greatest total area of all their concessions.)

I'm imagining something like this as the Linq to SQL equivalent (pseudo-code)

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

... but that's not right. Can anyone point me in the right direction?

A: 

This might be helpful to you.

roosteronacid
+4  A: 

Here you can find many examples about using aggregate functions and grouping, additionally I recommend you very much LinqPad, it's a great tool to test your queries on the fly and it's very good way to learn LINQ, it comes preloaded with 200 examples.

CMS
Thanks - playing with LinqPad now, very cool.
Herb Caudill
+10  A: 

Answer

Here's the correct Linq to SQL equivalent

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

Thanks to @CMS for pointing me to LinqPad - what a great tool. You just point it to your database and you're off and running. Not only are hundreds of samples included, but you can run them against included live databases. I was able to arrive at the above query in just a few minutes starting from the provided samples.

Herb Caudill
You're welcome Herb, I also learned a lot with that tool...
CMS
A big thumbs up for LinqPad
Farinha
Can you provide the C# version of this segment? I've tried but not successful.
Buu Nguyen
A: 

Linq 101 fails a lot...