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で動作し、 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 は、構造体への射影をサポートしていません。クエリ プロバイダーでこれをサポートするように設計する必要がありましたが、そうしないことを選択しただけです。彼らは、それが開発コストに見合うだけの価値のある機能であるとは考えていなかったようです。

クエリで新しいクラスインスタンスに投影する必要があります。

于 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 に答える