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

U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I have a large data set and a SSIS package. How can I load this file in multi threading?
This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed

863 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

26 Experts available now in Live!

Get 1:1 Help Now