Ошибка при создании запроса Linq
У меня есть запрос вроде этого
struct MyStruct
{
public string name;
public double amount;
}
var a =
from p in Products
select new MyStruct
{
name = p.Name,
amount = p.Amount
};
Когда я выполняю запрос, я получаю следующее исключение:
System.NotSupportedException { "В LINQ для сущностей поддерживаются только конструкторы и инициализаторы без параметров".}
но если я изменил тип MyStruct на класс, тогда он работает как ожидалось.
Почему он работает с классом и не работает с struct?
Ответы
Ответ 1
Он работает с LinqToObjects. Я предполагаю, что LinqToEntities не знает, как создать структуру. Если вы сделаете это, все будет в порядке:
struct MyStruct
{
public string name;
public double amount;
}
var a = Products.AsEnumerable()
.Select(p => new MyStruct
{
name = p.Name,
amount = p.Amount
};
Ответ 2
Linq для объектов не поддерживает проектирование в структуры. Им было бы необходимо разработать поддержку для этого в поставщике запросов, и они просто не хотят этого делать. Похоже, что они не рассматривали его как достаточно ценную функцию для поддержки того, чтобы она стоила затрат на разработку.
Вам нужно будет спроектировать в новые экземпляры класса в ваших запросах.
Ответ 3
Попробуйте следующее:
struct MyStruct
{
public string name;
public double amount;
}
Products[] p1 = new Products[] { new Products { name = "prod1", amount = 5 }
var c = from p in p1
select new MyStruct { name = p.name, amount = p.amount };