В LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров - PullRequest
121 голосов
/ 26 августа 2010

У меня есть эта ошибка в этом выражении linq:

var naleznosci = (from nalTmp in db.Naleznosci
                              where nalTmp.idDziecko == idDziec
                              select new Payments
                              (
                                  nalTmp.Dziecko.Imie,
                                  nalTmp.Dziecko.Nazwisko,
                                  nalTmp.Miesiace.Nazwa,
                                  nalTmp.Kwota,
                                  nalTmp.RodzajeOplat.NazwaRodzajuOplaty,
                                  nalTmp.RodzajeOplat.TypyOplat.NazwaTypuOplaty,
                                  nalTmp.DataRozliczenia,
                                  nalTmp.TerminPlatnosci
                              )).ToList();

Есть идеи, как решить эту проблему? Я пытаюсь с любой комбинацией выражения ...: /

Ответы [ 13 ]

1 голос
/ 10 ноября 2015

В дополнение к вышеупомянутым методам вы также можете анализировать его как коллекцию Enumerable, например:

(from x in table
....
).AsEnumerable()
.Select(x => ...)

Это также дает дополнительное преимущество, облегчающее жизнь при создании анонимного объекта, например:

 (from x in tableName
select x.obj)
.Where(x => x.id != null)
.AsEnumerable()
.Select(x => new {
   objectOne = new ObjectName(x.property1, x.property2),
   parentObj = x
})
.ToList();

Помня, однако, что анализ коллекции как Enumerable тянет ее в память, поэтому она может быть ресурсоемкой! Здесь следует соблюдать осторожность.

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

да, попробуйте вот так ....

var naleznosci = (from nalTmp in db.Naleznosci
                              where nalTmp.idDziecko == idDziec
                              select new Payments()
                              {
                                  Dziecko.Imie,
                                  Dziecko.Nazwisko,
                                  Miesiace.Nazwa,
                                  Kwota,
                                  RodzajeOplat.NazwaRodzajuOplaty,
                                  RodzajeOplat.TypyOplat.NazwaTypuOplaty,
                                  DataRozliczenia,
                                  TerminPlatnosci
                              }).ToList();

это обновит ваш объект Payment с помощью конструктора без параметров, а затем инициализирует свойства, перечисленные в фигурных скобках { }

0 голосов
/ 30 мая 2019

Хотя уже поздно отвечать, это все равно может помочь кому-то, терпящему бедствие.Поскольку LINQ для сущностей не поддерживает объектные конструкции без параметров.Тем не менее, методы проекции для IEnumerable .

Поэтому перед выбором просто конвертируйте IQueryable в IEnumerable , используя этот код:

var result = myContext.SomeModelClass.AsEnumerable().Select(m => m.ToString());

Будет работать нормально.Однако это, конечно, утратит преимущества нативных запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...