Как получить и использовать источник группировки в LINQ?
Я хотел бы использовать параметр "o" (исходный объект) в результате группировки, как показано ниже:
return (from o in objects
group o by MySpecialConverter(o) into g
select new Group
{
Key = g.Key,
Items = g.ToList(),
Source = o, // Error: The name 'o' does not exist in the current context.
...
}).ToList();
Однако я не могу получить доступ к "о" в новой группе.
1 ответ
Решение
Используйте сгруппированный элемент, а не используемый элемент в выражении группы.
return (from o in objects
group o by MySpecialConverter(o) into g
select new Group // Create Group class with the data types and object bellow
{
Key = g.Key,
Items = g.ToList(),
Source = g // used the grouped element here for selection
}).ToList();
Или, если вы хотите получить любое количество элементов или первого элемента или последнего элемента, вы можете использовать ключевое слово let.
return (from o in objects
group o by MySpecialConverter(o) into g
let oLocal = g.FirstOrDefault()
select new Group // Create Group class with the data types and object bellow
{
Key = g.Key,
Items = g.ToList(),
Source = oLocal // used the grouped element here for selection
}).ToList();