У меня есть этот (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
Моя группа немного сложнее, поэтому я предпочитаю использовать ключ группы, а не вводить новое свойство.
Это то, что я пытался, но не работает, потому что «ключ» 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 };
В конце концов, чувствительность к регистру не была важной, потому что я мог предположить, что все оболочки были одинаковыми ...
Смежный вопрос: Оператор LINQ Distinct игнорирует регистр?