是否可以从Linq2Entities查询返回结构

本文关键字:查询 返回 结构 Linq2Entities 是否 | 更新日期: 2023-09-27 18:27:05

此代码生成运行时错误:

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的一个已知限制,即必须使用类而不是结构?

是否可以从Linq2Entities查询返回结构

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 });