创建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的类型更改为,那么它将按预期工作。

为什么在中工作,而在结构中失败?

创建Linq查询错误

它与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 };