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 回答