【发布时间】:2011-01-04 20:05:11
【问题描述】:
我有这个 (XLinq) 查询,想知道如何将其转换为查询语法:
var grouped = doc.Descendants()
.GroupBy(t => t.Element(ns + "GroupingAttr").Value, StringComparer.OrdinalIgnoreCase);
这是不带 StringComparer 的查询语法:
var grouped = from t in doc.Descendants()
group t by t.Element(ns + "GroupingAttr").Value into group
select group
我的 groupby 比这个复杂一点,所以我更喜欢使用 group 的 key 而不是引入新的属性。
这是我尝试过的,但不起作用,因为在 select 的上下文中 let“键”不可用(我使用了更复杂的键定义来说明我不想重复的事实这在选择中):
var grouped = from t in doc.Descendants()
let key = ((t.Name != ns + "SomeElementName") ? t.Element(ns + "SomeAttribute") : t.Element(ns + "SomeOtherAttribute")).ElementValueOrDefault("Empty group")
group t by key.ToUpper() into g
select new { Name = key, Items = g };
最后,区分大小写并不重要,因为我可以假设所有的大小写都是相同的......
【问题讨论】:
标签: c# linq linq-to-xml group-by ignore-case