Another Way to LINQ

Another Way to LINQ

  • Comments 6

I was reading another installment of ScottGu's articles on his blog about using LINQ to SQL in ASP.NET with the LinqDatasource. Scott does an amazing job of explaining things very clearly so if you haven't checked his posts out already then you definitely should. It's also very nice to see him show both VB and C# code. One example that I want to point out is where he uses a Lambda Expression to get the totals for each product:

  Dim products = From p In db.Products _

                 Where p.Category.CategoryName.StartsWith("C") _

                 Select p.ProductID, _

                   p.ProductName, _

                   p.UnitPrice, _

                   NumOrders = p.Order_Details.Count, _

                   Revenue = p.Order_Details.Sum(Function(details) _

                             details.UnitPrice * details.Quantity)

 

The lambda here is denoted by the "Function" keyword and it is passed to the "Sum" extension method in order to calculate the order totals for each product. In VB 9 we can also use "Aggregate" instead in this case. Additionally, we can use "Like" in the Where clause producing the following equivalent query:

 

Dim products = From p In db.Products _

               Where p.Category.CategoryName Like "C*" _

               Select p.ProductID, _

                p.ProductName, _

                p.UnitPrice, _

                NumOrders = p.Order_Details.Count, _

                Revenue = _

                   Aggregate detail In p.Order_Details _

                   Into Sum(detail.UnitPrice * detail.Quantity)

VB 9 has additional LINQ expressions that you can use instead of manually writing lambda expressions for things like Sum, Min, Max, Average, etc. I prefer the easier-to-understand VB expression syntax so I tend to use these instead. For more information on writing group and aggregate queries in VB 9 watch this video.

 

Enjoy!

Leave a Comment
  • Please add 1 and 6 and type the answer here:
  • Post
  • PingBack from http://msdnrss.thecoderblogs.com/2007/09/13/another-way-to-linq/

  • thanks , i was looking for LINQ VB samples

    :)

  • Hi buaziz,

    You can also check out the VB LINQ How-Do-I videos here: http://msdn2.microsoft.com/en-us/vbasic/bb466226.aspx?wt.slv=topsectionsee#linq

    Cheers,

    -B

  • Hi, could you please help me? I need to retrieve and display the following (from Northwind as an example):

    CustomerID   Number of Orders  Total Ordered

    ALFKI               12                    $1234.60

    BONAPP             6                        $41.50

    Which need a join between 3 tables.

    And I would like it in LINQ, of course!

    The first 2 columns I've no problem, here it is:

    Dim orderQuery2 = From c In db.Customers _

                   Where c.Country = selectedCountry _

                   Select c.CustomerID, c.CompanyName, _

                   NumOrders = c.Orders.Count

    But I'm just pulling my hairs out of my head when it comes to adding the 3rd colum.

    Any clue?

    If not, then I've to do the job with two separate LINQ queries, and then I'll be dishonoured!

    TIA for your help.

    Didier

  • Hi Didier,

    Just use the aggregate clause like I show above. Is that not working for you?

    -B

  • oooooooooh massi she is my lovely teacher

Page 1 of 1 (6 items)