У мене була така ж проблема сьогодні, і моє рішення було схоже на те, що перераховано у Yoda, проте воно працює лише з синтаксисом.
Адаптація мого рішення до вашого коду: я додав наступний статичний метод до класу об'єктів
/// <summary>
/// use this instead of a parameritized constructor when you need support
/// for LINQ to entities (fluent syntax only)
/// </summary>
/// <returns></returns>
public static Func<Naleznosci, Payments> Initializer()
{
return n => new Payments
{
Imie = n.Dziecko.Imie,
Nazwisko = n.Dziecko.Nazwisko,
Nazwa = n.Miesiace.Nazwa,
Kwota = n.Kwota,
NazwaRodzajuOplaty = n.RodzajeOplat.NazwaRodzajuOplaty,
NazwaTypuOplaty = n.RodzajeOplat.TypyOplat.NazwaTypuOplaty,
DataRozliczenia = n.DataRozliczenia,
TerminPlatnosc = n.TerminPlatnosci
};
}
а потім оновив базовий запит на наступне:
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select new Payments.Initializer());
Це логічно еквівалентно рішенню Джеймса Меннінга з перевагою підштовхування ініціалізації члена до об'єкта класу / передачі даних
Примітка. Спочатку я використовував більш описові назви, що "Ініціалізатор", але переглянувши, як я ним користуюся, я виявив, що "Ініціалізатор" був достатнім (принаймні для моїх цілей).
Підсумкове зауваження:
Після розробки цього рішення я спочатку думав, що буде просто поділитися тим самим кодом та адаптувати його до роботи для синтаксису Query. Я вже не вірю, що так має бути. Я думаю, що якщо ви хочете використовувати цю конструкцію скорочень, вам знадобиться метод для кожного (запиту, вільного) розмову, як описано вище, який може існувати в самому класі об'єктів.
Для синтаксису запитів знадобиться метод розширення (або якийсь метод поза базовим класом, який використовується). (оскільки синтаксис запитів хоче керувати IQueyable, а не T)
Ось зразок того, що я використав, щоб нарешті змусити це працювати для синтаксису запитів. (Йода це вже прибив, але я думаю, що використання може бути зрозумілішим, оскільки я спочатку цього не зрозумів)
/// <summary>
/// use this instead of a parameritized constructor when you need support
/// for LINQ to entities (query syntax only)
/// </summary>
/// <returns></returns>
public static IQueryable<Payments> Initializer(this IQueryable<Naleznosci> source)
{
return source.Select(
n => new Payments
{
Imie = n.Dziecko.Imie,
Nazwisko = n.Dziecko.Nazwisko,
Nazwa = n.Miesiace.Nazwa,
Kwota = n.Kwota,
NazwaRodzajuOplaty = n.RodzajeOplat.NazwaRodzajuOplaty,
NazwaTypuOplaty = n.RodzajeOplat.TypyOplat.NazwaTypuOplaty,
DataRozliczenia = n.DataRozliczenia,
TerminPlatnosc = n.TerminPlatnosci
};
}
та використання
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select nalTmp).Initializer().ToList();