Ошибка использования linq-to-entity для генерации xml - PullRequest
1 голос
/ 11 августа 2011

Как получается, следующее дает мне ошибку в духе «В Linq To Entities разрешены только конструкторы и инициализаторы без параметров». Я пытаюсь сгенерировать HTML из моих сущностей, чтобы обновить таблицу HTML с помощью AJAX.

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 Ответ

1 голос
/ 11 августа 2011

Ну, сообщение об ошибке говорит само за себя.

В 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 (второй запрос), потому что вы сразу видите , что выполняется с базой данных и что идет в памяти .

...