Hoje eu tinha o mesmo problema e minha solução era semelhante à listada pela Yoda, no entanto, ela funciona apenas com sintaxe fluente.
Adaptando minha solução ao seu código: Adicionei o seguinte método estático à classe de objeto
/// <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
};
}
e atualizou a consulta base para o seguinte:
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select new Payments.Initializer());
Isso é logicamente equivalente à solução de James Manning, com a vantagem de empurrar o inchaço da inicialização do membro para o objeto de transferência de classe / dados
Nota: Originalmente, eu estava usando nomes mais descritivos que "Initializer", mas depois de revisar como o estava usando, descobri que "Initilizer" era suficiente (pelo menos para meus propósitos).
Nota final:
Depois de criar esta solução, eu originalmente pensava que seria simples compartilhar o mesmo código e adaptá-lo ao trabalho para a sintaxe de consulta também. Não acredito mais que seja esse o caso. Eu acho que se você quiser usar esse tipo de construção abreviada, precisará de um método para cada fluente (consulta, fluente), conforme descrito acima, que possa existir na própria classe de objeto.
Para a sintaxe da consulta, seria necessário um método de extensão (ou algum método fora da classe base). (como a sintaxe da consulta deseja operar um IQueryable em vez de T)
Aqui está um exemplo do que eu usei para finalmente fazer com que isso funcionasse para a sintaxe da consulta. (Yoda já acertou em cheio, mas acho que o uso pode ser mais claro porque não o compreendi a princípio)
/// <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
};
}
e o uso
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select nalTmp).Initializer().ToList();