我有這個(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