Linq query for parent & Child tables with aggregates

Posted on 2010-11-11
Last Modified: 2012-05-10

I have 2 tables (PTO [Parent] &  PTODetails [Child]) that have a 1 to many relationship between them.  I would like to get the information from the parent table and some aggregated information from the child table using linq.  

If i where using SQL i would write something like this:

Select PTO.ID, Max(PTODetails.RequestDate), Min(PTODetails.RequestDate), PTO.PersonID
From  PTO Inner Join PTODetails on PTO.ID = PTODetails.PTOID
Where PTO.RequestDate > GetDate()

How would i go about writting something like that in LINQ?

Thanks in advance...

Question by:MRS
LVL 96

Accepted Solution

Bob Learned earned 250 total points
ID: 34119837
There are a whole heap of resources on LINQ, so you just need to find the right one.

101 LINQ Samples

Converting SQL to LINQ, Part 5: GROUP BY and HAVING (Bill Horst)

From Shipment In OrderTable 
Group OrderCost = Shipment.Cost By Shipment.ShippingZip 
Into Total = Sum(OrderCost), Average(OrderCost)

Open in new window

LVL 27

Assisted Solution

MikeToole earned 250 total points
ID: 34119891
Here's a simple example
Dim Customers As New List(Of Customer)

    Dim Orders As New List(Of Order)

    Private Sub LoadCustomers()

        Customers.Add(New Customer With {.CustomerID = 1, .Name = "AAA"})

        Customers.Add(New Customer With {.CustomerID = 2, .Name = "BBB"})

        Customers.Add(New Customer With {.CustomerID = 3, .Name = "CCC"})

        Orders.Add(New Order With {.CustomerID = 2, .OrderID = 23})

        Orders.Add(New Order With {.CustomerID = 1, .OrderID = 11})

        Orders.Add(New Order With {.CustomerID = 1, .OrderID = 13})

        Orders.Add(New Order With {.CustomerID = 2, .OrderID = 27})

        Orders.Add(New Order With {.CustomerID = 2, .OrderID = 24})

        Orders.Add(New Order With {.CustomerID = 2, .OrderID = 26})

        Orders.Add(New Order With {.CustomerID = 2, .OrderID = 25})

        Orders.Add(New Order With {.CustomerID = 3, .OrderID = 39})

        Orders.Add(New Order With {.CustomerID = 1, .OrderID = 12})

        Orders.Add(New Order With {.CustomerID = 3, .OrderID = 31})

        Orders.Add(New Order With {.CustomerID = 3, .OrderID = 32})

        Orders.Add(New Order With {.CustomerID = 2, .OrderID = 22})

    End Sub

    Public Sub GroupLinq()


        Dim Q = From Cust In Customers, Ord In Orders

                Where Cust.CustomerID = Ord.CustomerID

                Group Ord By Cust Into

                MaxID = Max(Ord.OrderID),

                MinID = Min(Ord.OrderID)

        For Each obj In Q

            Console.WriteLine(String.Format("Customer: {0}, Min: {1}, Min: {2}", obj.Cust.CustomerID, obj.MinID, obj.MaxID))



    End Sub

Open in new window


Author Closing Comment

ID: 34120594
Thank you both.  I am not sure what exactly i was missing, but both of your examples got me what i needed..

Thanks again

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Having an SQL database can be a big investment for a small company. Hardware, setup and of course, the price of software all add up to a big bill that some companies may not be able to absorb.  Luckily, there is a free version SQL Express, but does …
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Viewers will learn how the fundamental information of how to create a table.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now