2

このコードはランタイム エラーを生成します。

struct MyStruct {
  public int ID;
  public string Desc;
}
...
var q = db.MyTable.Select(t => new MyStruct { ID = t.ID, Desc = t.Desc });

構造体にパラメーターのないコンストラクターがないため、エラーが発生します。しかし、明示的なコンストラクターは使用できません。そのための SQL 変換がないためです。

私の最初の質問は、これがコンパイル時エラーを生成しない理由です。コンパイラMyStructは、それが構造体であり、この存在しないパラメーターなしのコンストラクターでオブジェクト初期化子を使用できないことを認識しています。

しかし、より重要な問題は、これは Linq2Entities の既知の制限であり、構造体ではなくクラスを使用しなければならないということですか?

4

1 に答える 1

6

1) コンパイラは、LINQ To Entities が何をするかを認識していません。

2)はい、知っています。

ただし、修正:

var q = db.MyTable
    //do your processing here (Where, Any, Join, whatever)
    .ToList() //or AsEnumerable or ToArray
    .Select(t => new MyStruct { ID = t.ID, Desc = t.Desc });
于 2013-08-08T15:17:52.607 に答える