创建Linq查询错误
本文关键字:错误 查询 Linq 创建 | 更新日期: 2023-09-27 18:08:25
我有一个这样的查询
struct MyStruct
{
public string name;
public double amount;
}
var a =
from p in Products
select new MyStruct
{
name = p.Name,
amount = p.Amount
};
当我执行查询时,我得到以下异常:
系统。NotSupportedException {" LINQ to Entities中只支持无参数构造函数和初始化器。"}
但是如果我将MyStruct的类型更改为类,那么它将按预期工作。
为什么在类中工作,而在结构中失败?
它与LinqToObjects一起工作。我猜LinqToEntities不知道如何创建一个结构。如果你这样做,你会没事的:
struct MyStruct
{
public string name;
public double amount;
}
var a = Products.AsEnumerable()
.Select(p => new MyStruct
{
name = p.Name,
amount = p.Amount
};
Linq到实体不支持投影到结构体。他们本来需要在查询提供程序中设计对此的支持,但他们选择不这样做。他们似乎并不认为这是一个足够有价值的功能,不值得为它付出开发成本。
你需要在你的查询中投影到新的类实例。
试试这个:
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 };