Вы не можете - точка. Вы не можете использовать анонимные типы вне своей области действия, например, вы не можете вернуть их как возвращаемые значения из метода.
Если вам нужно вернуть их, вам нужно определить новый конкретный класс вместо анонимного типа и использовать его вместо анонимного типа.
См. блог Рика Страля о области действия анонимных типов и см. Здесь документы MSDN , в которых четко указано:
Анонимный тип имеет область действия метода. к
передать анонимный тип или
коллекция, которая содержит анонимный
типы, вне границы метода, вы
сначала должен привести тип к объекту.
Однако это побеждает сильных
типизация анонимного типа. если ты
необходимо сохранить результаты запроса или передать
они вне границы метода,
рассмотреть возможность использования обычного имени
структура или класс вместо
анонимный тип.
ОК, конечно, есть грязные и ужасные хаки, которые действительно возвращают анонимные типы. Но если Microsoft MSDN И Джон Скит не одобрит эту практику, тогда - просто не делайте этого . По определению и намерению анонимные типы связаны с методом, в котором они определены.
ОБНОВЛЕНИЕ для chobo2: я не знаю, каковы ваши типы данных - просто догадываюсь - но предполагая, что "префикс" является целым числом, а "метки" - десятичным, вы можете определить новый класс:
public class ReturnValue
{
int prefix { get; set; }
decimal Marks { get; set; }
}
и тогда ваш код будет методом, который возвращает List<ReturnValue>
:
public List<ReturnValue> thisIsAtest()
{
DbContext.Table.Where(u => u.Table.UserId == userId && u.OutOFF != 0)
.GroupBy(u => new { u.Table.Prefix })
.Select(group => new ReturnValue
{ prefix = group.Key,
Marks = group
.Sum(item => (item.Mark * item.Weight) / item.OutOFF) })
.ToList();
}
Ключ здесь: в вашем методе .Select
вместо создания нового экземпляра анонимного типа:
.Select(group => new { prefix = group.Key, marks = .... }
вы создаете экземпляр конкретного типа:
.Select(group => new ReturnValue { prefix = group.Key, marks = .... }
Таким образом, у вас будет конкретный класс ReturnValue
- назовите то, что вам нравится, - и тогда вы можете легко вернуть список этого типа и использовать этот тип в другом месте.