gpt4 book ai didi

c# - 3个带linq的嵌套组

转载 作者:数据小太阳 更新时间:2023-10-29 02:02:23 26 4
gpt4 key购买 nike

我正在尝试获取 4 个列表深度列表集合,List<List<List<List<int>>>> .从我的 Xml 看起来像

<root> 
<Claim key="1" carrier="carA" zip="34343" pages="1"/>
<Claim key="2" carrier="carA" zip="34343" pages="2"/>
<Claim key="3" carrier="carB" zip="10505" pages="2"/>
<Claim key="4" carrier="carB" zip="10505" pages="4"/>
<Claim key="5" carrier="carB" zip="10505" pages="4"/>
</root>

输出的结构应该是这样的

-all
-1
-34343
-carA
-1

-2
-34343
-carA
-2

-10505
-carB
-3
-4
-10505
-carB
-4
-5

目标是根据节点属性首先按页数对我的 XML 进行排序,然后按 zip,然后按承运人。然后我需要循环浏览结果列表并按特定顺序处理每个 claim 。我无法为 3 个嵌套组获取正确的语法。我已经完成了获得 2 个嵌套组,任何人都可以帮助我获得第三个。

到目前为止,这是我的代码。

var query = from claim in root.Elements("Claim")
group claim by claim.Attributes("Pages").First().Value into pageGroups
from zipGroups in
(from claim in pageGroups
group claim by int.Parse(claim.Attributes("CarrierZip").First().Value))
group zipGroups by pageGroups.Key;

最佳答案

我不确定如何使用 XML 执行此操作,但是如果您已经将声明转换为某种类型的数组 Claim (例如,在代码中,claimsClaim[] 类型)和 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);

它不是很干净,但是可以用。您可以选择具有给定页面、 zip 和承运人的声明,如下所示:

var myclaim = dic[4][34343]["carB"];

我选择给你一个翻译成Dictionary<TKey, TValue>的方法而不是 List<T>因为翻译成 List丢失了 key ,因此获取 key (页面、 zip 或载体)的唯一方法是向下遍历列表,这可能会变得丑陋和复杂。抱歉,如果字典不适合您。

关于c# - 3个带linq的嵌套组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com