1

我有这个(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 而不是引入新的属性。

这是我尝试过的,但不起作用,因为 let “key”在 select 的上下文中不可用(我使用了更复杂的键定义来说明我不想在选择):

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 };

最后,区分大小写并不重要,因为我可以假设所有的大小写都是相同的......

相关问题:LINQ Distinct 运算符忽略大小写?

4

2 回答 2

1

我认为您不能在查询语法中使用比较器,但是您可以调用 ToUpper 您的值。然后,这将为您忽略大小写。作为旁注,使用 ToUpper 比使用 ToLower 更有效,因此 ToUpper 将是要走的路。

C# 团队在查询语法中引入的内容非常稀少,因此对于这样的任何事情,您都必须使用扩展方法语法。

于 2009-06-26T08:32:55.760 回答
0
var grouped = from t in doc.Descendants()
              group t by t.Element(ns + "GroupingAttr").Value into MyGroup
              select MyGroup.Key
于 2009-06-26T08:32:17.137 回答