Что означает ошибка «... без параметров и инициализаторы поддерживаются ...»? - PullRequest
7 голосов
/ 12 августа 2010

Я получаю эту ошибку:

Only parameterless constructors and initializers are supported in LINQ to Entities.

При попытке запустить этот код (нашел этот код здесь и создал тестовую базу данных для игры):

XElement xml = new XElement("contacts",
                    from c in db.Contacts
                    orderby c.ContactId
                    select new XElement("contact",
                              new XAttribute("contactId", c.ContactId),
                              new XElement("firstName", c.FirstName),
                              new XElement("lastName", c.LastName))
                    );

где db - объект автоматически создаваемых объектов. Любые идеи о том, как заставить это работать?

Ответы [ 2 ]

6 голосов
/ 12 августа 2010

Я полагаю, что он возражает против того факта, что вы используете конструктор XElement, который принимает параметры в вашем предложении "select".Поскольку XElement не имеет конструктора без параметров, вам может потребоваться изменить код, чтобы выбрать анонимный тип, и инициализировать коллекцию XElement после факта.,Сначала я делаю запрос EF, а затем вызываю ToList (), чтобы я мог выбрать коллекцию XElement, используя Linq to Objects, а не EF.

1 голос
/ 12 августа 2010

Я бы переписал это так:

XElement xml2 = new XElement("contacts", 
                    from c in
                    ((IEnumerable<Contact>)(from c in Contacts
                    orderby c.ContactId
                    select c))
                select new XElement("contact", 
                      new XAttribute("contactId", c.ContactId),
                      new XElement("firstName", c.FirstName),
                      new XElement("lastName", c.LastName))
            );

Смысл в том, чтобы отделить дерево выполнения LINQ от экземпляра XElement. Преобразовав запрос LINQ из IQueriable в IEnumerable, вы отделите код, который LINQ будет использовать для получения данных из кода, который будет создавать ваши XElements.

...