Допустим, у меня есть объект со следующими свойствами.Вложенные группы, использующие linq?
public string VendorNumber { get; set; }
public string PartNumber { get; set; }
public string PartDivision { get; set; }
У меня есть список около 300 из этих объектов. Я пытаюсь сначала сгруппировать их по VendorNumber, затем по разделу. Я должен быть в состоянии сверлить в них, как так далее:
- Производитель A
Divsion 1
--Part 0001
--Part 0002
--Part 0003
Divsiion 2
- Часть 0001 - Vendor B
Division 1
--Part 0023 ... и т.д. ...
я могу сделать первую группу легко выглядеть примерно так:
var vendorGroups =
from v in vendors
group v by v.VendorNumber into vg
select new { VendorNumber = vg.Key, Parts = vg, Count = vg.Count() };
Я не могу показаться, чтобы получить вложенная группировка работает, хотя даже после того, ссылаясь на некоторые другие посты здесь и на сайте MSDN. Благодарю.
Вот что я закончил с из предложений:
Я сделал некоторые успехи, используя предложения, но я не могу показаться, чтобы получить доступ ко второму уровню, когда зацикливание:
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: Это также может быть записана следующим образом:
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);
}
}
ли значения PartDivision уникальными для каждого поставщика, или может то же значение, можно использовать два разных производителей? – yoozer8
Пожалуйста, смотрите на SO Ссылка ниже, [http://stackoverflow.com/questions/9578887/nested-group-by-linq][1] [1]: HTTP://переполнение стека.com/questions/9578887/nested-group-by-linq –
Значения PartDivision НЕ уникальны для каждого поставщика. – BBauer42