Ho avuto lo stesso problema oggi e la mia soluzione era simile a quella elencata da Yoda, tuttavia funziona solo con una sintassi fluida.
Adattamento della mia soluzione al tuo codice: ho aggiunto il seguente metodo statico alla classe di oggetti
/// <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 quindi aggiornata la query di base alla seguente:
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select new Payments.Initializer());
Ciò è logicamente equivalente alla soluzione di James Manning con il vantaggio di spingere il gonfiore dell'inizializzazione dei membri nell'oggetto Class / Data Transfer
Nota: Inizialmente stavo usando nomi più descrittivi di "Inizializzatore" ma dopo aver esaminato come lo stavo usando, ho scoperto che "Inizializzatore" era sufficiente (almeno per i miei scopi).
Nota finale:
Dopo aver escogitato questa soluzione, inizialmente pensavo che sarebbe stato semplice condividere lo stesso codice e adattarlo per funzionare anche con la sintassi delle query. Non credo più che sia così. Penso che se si desidera essere in grado di utilizzare questo tipo di costruzione abbreviata, sarebbe necessario un metodo per ogni (fluente, fluido) fluente come descritto sopra che può esistere nella classe oggetto stessa.
Per la sintassi della query sarebbe richiesto un metodo di estensione (o un metodo esterno alla classe base). (poiché la sintassi della query vuole operare un IQueryable anziché T)
Ecco un esempio di ciò che ho usato per far finalmente funzionare questo per la sintassi delle query. (Yoda lo ha già risolto, ma penso che l'uso potrebbe essere più chiaro perché all'inizio non l'ho capito)
/// <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 l'uso
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select nalTmp).Initializer().ToList();