创建Linq查询时出错

时间:2013-04-10 17:18:22

标签: c# .net linq entity-framework linq-to-objects

我有一个像这样的查询

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 失败?

3 个答案:

答案 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 };