我有一个像这样的查询
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 to Entities中仅支持无参数构造函数和初始值设定项。”}
但如果我将MyStruct的类型更改为 class ,那么它会按预期工作。
为什么它适用于类并且使用 struct 失败?
答案 0 :(得分:3)
它适用于LinqToObjects。我猜LinqToEntities不知道如何创建结构。如果你这样做,你会没事的:
struct MyStruct
{
public string name;
public double amount;
}
var a = Products.AsEnumerable()
.Select(p => new MyStruct
{
name = p.Name,
amount = p.Amount
};
答案 1 :(得分:2)
Linq to entities不支持投射到结构体。他们需要在查询提供程序中设计对此的支持,他们只是选择不这样做。看起来他们认为这不足以支持它值得开发成本。
您需要在查询中投射到新的类实例。
答案 2 :(得分:-1)
试试这个:
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 };