此代码生成运行时错误:
struct MyStruct {
public int ID;
public string Desc;
}
...
var q = db.MyTable.Select(t => new MyStruct { ID = t.ID, Desc = t.Desc });
发生错误是因为结构没有无参数构造函数。但我不能使用显式构造函数,因为没有SQL翻译。
我的第一个问题是为什么这不会产生编译时错误 - 编译器知道MyStruct
是一个结构,并且我不能在这个不存在的无参数构造函数上使用对象初始化器。 / p>
但更重要的问题是,这是Linq2Entities的一个已知限制,你必须使用类而不是结构?
答案 0 :(得分:6)
1)编译器不知道LINQ To Entities做了什么,它不应该。
虽然修复了:
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 });