14

我有一个像这样的查询

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那么它会按预期工作。

为什么它适用于class而失败struct

4

3 回答 3

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
    };
于 2013-04-10T17:25:05.340 回答
2

Linq to entity 不支持投影到结构中。他们需要在查询提供程序中设计对此的支持,而他们只是选择不这样做。看起来他们并不认为它是一个足够有价值的特性来支持它值得开发成本。

您将需要在查询中投影到新的实例中。

于 2013-04-10T17:51:08.227 回答
-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 };
于 2013-04-10T17:44:17.150 回答