I have the following collection
public IQueryable<myObjectType > GetWorkCellLoadGraphDataByIdDummy()
{
IList<myObjectType> workCellLoadGraphDataCollection = new List<myObject>()
{
new myObjectType(DateTime.Today.AddHours(8).AddMinutes(30), 1),
new myObjectType(DateTime.Today.AddHours(10).AddMinutes( 10 ), 6 ),
new myObjectType(DateTime.Today.AddHours(13).AddMinutes( 30 ),8 ),
new myObjectType(DateTime.Today.AddDays(1).AddHours(8).AddMinutes(30), 1),
new myObjectType(DateTime.Today.AddDays(1).AddHours( 10 ).AddMinutes( 10 ), 5 ),
new myObjectType(DateTime.Today.AddDays(1).AddHours( 13 ).AddMinutes( 30 ), 2 )
};
// Write some LINQ code to group data according to first parameter
// Perform sum of last parameter
// Shape the data to be in the form of myObjectType
// return result;
}
and what I want to do is to group items by the first parameter of the myObjectType class.
Then for each grouping, I’d like to do the sum of all the last parameters.
Finally the result should be returned in the form of “myObjectType”
I know how to do it the old fashioned way i.e. looping through all the items and doing the sums. However, I’d like to learn how to do it in LINQ which is something I’ve just started.
Can anyone point me in the right direction so that I can translate my requirements into LINQ?
In effect, the result should be a collection containing two objects of type myObjectType as follows:
- First object in collection is (DateTime.Today, 15 )
- Second object in collection is (DateTime.Today.AddDays(1), 8)
TIA,
David
Given a class with this basic design
You could fulfill your requirement using LINQ in the manner below. The first example produces
IEnumerable<MyObjectType>using fluent extension method syntax.The second version achieves the same result but uses the more SQL-esque query expression syntax.
From there, you utilize the extension methods
AsQueryableto yield anIQueryableresult, orToList()/ToArray()to yield concrete collections.