Я не уверен, как это сделать с XML, но если вы уже перевели утверждения в массив некоторого типа Claim
(например, в коде claims
имеет тип Claim[]
)и тип Claim
имеет свойства или поля с именами Key
, Carrier
, Zip
и Pages
, тогда это должно работать.
var dic = (from claim in claims
group claim by claim.Pages into pageGroup
select new {
Page = pageGroup.Key,
Entries =
(from zentry in pageGroup
group zentry by zentry.Zip into zipGroup
select new {
Zip = zipGroup.Key,
Entries =
(from centry in zipGroup
group centry by centry.Carrier into carrierGroup
select new { Carrier = carrierGroup.Key, Entries = carrierGroup.AsEnumerable() })
.ToDictionary(ent => ent.Carrier, ent => ent.Entries)
}).ToDictionary(ent => ent.Zip, ent => ent.Entries)
}).ToDictionary(ent => ent.Page, ent => ent.Entries);
Это не очень чисто, но работает.Вы можете выбрать претензию с указанной страницей, почтовым индексом и носителем следующим образом:
var myclaim = dic[4][34343]["carB"];
Я решил дать вам способ перевести на Dictionary<TKey, TValue>
вместо List<T>
, потому что перевод на List
теряет ключ, поэтому единственный способ получить ключ (страницу, почтовый индекс или носитель) - просмотреть список вниз, что может стать уродливым и сложным.Извините, если у вас не работает словарь.