使用linq-to-entities生成xml时出错

时间:2011-08-10 20:31:12

标签: ajax linq linq-to-entities linq-to-xml

以下是如何给出一个错误:“在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);

1 个答案:

答案 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生成(第二个查询)也是一种很好的做法,因为您会立即看到针对数据库执行的操作以及内存中的内容