以下是如何给出一个错误:“在Linq To Entities中只允许无参数构造函数和初始值设定项”。我试图从我的实体生成HTML以使用AJAX更新HTML表。
public class Foo
{
public int Bar1 { get; set; }
public string Bar2 { get; set; }
public DateTime Bar3 { get; set; }
}
XElement[] elements = (
from x in FooEntities.Foos
select new XElement("tr",
new XElement("td", HttpUtility.HtmlEncode(x.Bar1)),
new XElement("td", HttpUtility.HtmlEncode(x.Bar2)),
new XElement("td", HttpUtility.HtmlEncode(x.Bar3)))
)
.ToArray<XElement>(); // Error
XElement html = new XElement("table", headerXElement, elements);
答案 0 :(得分:1)
嗯,错误信息不言而喻。
Linq To Entities中只允许无参数构造函数和初始值设定项。
LINQ to Entities可能很难取悦,您怎么看?
在获得实体之后立即调用ToArray
,因此您只处理LINQ to Objects:
var foos = (from x in FooEntities.Foos
select x).ToArray();
XElement[] elements = (
from x in foos
select new XElement("tr",
new XElement("td", HttpUtility.HtmlEncode(x.Bar1)),
new XElement("td", HttpUtility.HtmlEncode(x.Bar2)),
new XElement("td", HttpUtility.HtmlEncode(x.Bar3)))
)
.ToArray();
XElement html = new XElement("table", headerXElement, elements);
分离数据库调用(第一个查询)和业务对象/ XML生成(第二个查询)也是一种很好的做法,因为您会立即看到针对数据库执行的操作以及内存中的内容。