Как получить и использовать источник группировки в 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();
Другие вопросы по тегам