Lets say I have an object with the following properties.
public string VendorNumber { get; set; }
public string PartNumber { get; set; }
public string PartDivision { get; set; }
I have a list of about 300 of these objects. I am trying to group them first by VendorNumber, then by Division. I should be able to drill into them like so afterwards:
- Vendor A
Divsion 1
--Part 0001
--Part 0002
--Part 0003
Divsiion 2
--Part 0001 - Vendor B
Division 1
--Part 0023 ...etc...
I can do the first grouping easily like so:
var vendorGroups =
from v in vendors
group v by v.VendorNumber into vg
select new { VendorNumber = vg.Key, Parts = vg, Count = vg.Count() };
I can't seem to get the nested grouping working though even after referring to some other posts here and on the MSDN. Thanks.
Here is what I ended up with from the suggestions:
I have made some progress using suggestions but I can't seem to access the second level when looping:
var vendorGroups = forecastHelpers
.GroupBy(x => new { VendorNumber = x.VendorNumber, Division = x.PartDivision, Level = 1 })
.GroupBy(x => new { VendorNumber = x.Key.VendorNumber }).OrderBy(x => x.Key.VendorNumber);
foreach (var vendorGroup in vendorGroups)
{
System.Diagnostics.Debug.WriteLine("VendorNumber: " + vendorGroup.Key.VendorNumber);
foreach (var divisionGroup in vendorGroup)
{
System.Diagnostics.Debug.WriteLine(" Division: " + divisionGroup.Key.Division);
foreach (var partNumber in divisionGroup)
{
System.Diagnostics.Debug.WriteLine(" PartNumber: " + partNumber.PartNumber);
}
}
}
Update 2: This could also be written like so:
var vendorGroupings = from f in forecastHelpers
group f by new { VendorNumber = f.VendorNumber, Division = f.PartDivision, Level = 2 } into vendorGroups
from divisionGroups in
(from division in vendorGroups
orderby division.PartDivision
group division by new { Division = division.PartDivision })
orderby vendorGroups.Key.VendorNumber
group divisionGroups by new { VendorNumber = vendorGroups.Key.VendorNumber, Level = 1 };
foreach (var vendorGroup in vendorGroupings)
{
System.Diagnostics.Debug.WriteLine("VendorNumber: " + vendorGroup.Key.VendorNumber);
foreach (var division in vendorGroup)
{
System.Diagnostics.Debug.WriteLine(" Division: " + division.Key.Division);
foreach (var part in division)
{
System.Diagnostics.Debug.WriteLine(" PartNumber: " + part.PartNumber);
}
}