我有这个(XLINQ)查询,想知道如何将它转换为查询语法:的LINQ:使用StringComparer用的GroupBy /查询语法鲜明
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比这个稍微复杂一些,所以我更喜欢使用组的密钥而不是引入新的属性。
这是我试过的,但不起作用,因为让“键”在选择的上下文中不可用(我用我更复杂的键定义来说明我不想要的事实在选择重复此):
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 operator ignore case?
我不想使用ToUpper,因为我稍后需要密钥,并且不希望它们全部大写。如前所述,我可能会创建一个匿名类型并定义一个与键值相同的属性,但使用原始值。我不想这样做,因为我的密钥非常复杂,但在这种情况下我可以使用let ... – riezebosch 2009-06-26 12:16:52