Saya memiliki masalah yang sama hari ini dan solusi saya mirip dengan apa yang terdaftar di Yoda, namun hanya bekerja dengan sintaks yang lancar.
Menyesuaikan solusi saya ke kode Anda: Saya menambahkan metode statis berikut ke kelas objek
/// <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
};
}
dan kemudian memperbarui kueri dasar sebagai berikut:
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select new Payments.Initializer());
Ini secara logis setara dengan solusi James Manning dengan keuntungan mendorong penggelembungan inisialisasi anggota ke Kelas / Objek Transfer Data
Catatan: Awalnya saya menggunakan lebih banyak nama deskriptif yang "Initializer" tetapi setelah meninjau bagaimana saya menggunakannya, saya menemukan bahwa "Initilizer" sudah cukup (setidaknya untuk tujuan saya).
Catatan Akhir:
Setelah menemukan solusi ini, saya awalnya berpikir akan mudah untuk membagikan kode yang sama dan mengadaptasinya agar berfungsi untuk sintaks Query juga. Saya tidak lagi percaya hal itu terjadi. Saya berpikir bahwa jika Anda ingin dapat menggunakan jenis steno konstruksi ini Anda akan memerlukan metode untuk setiap (query, fasih) fasih seperti yang dijelaskan di atas yang dapat ada di kelas objek itu sendiri.
Untuk sintaks kueri diperlukan metode ekstensi (atau beberapa metode di luar kelas dasar yang digunakan). (karena sintaks kueri ingin mengoperasikan IQueryable daripada T)
Berikut adalah contoh dari apa yang saya gunakan untuk akhirnya mendapatkan ini berfungsi untuk sintaks kueri. (Yoda sudah memakukan ini tapi saya pikir penggunaannya bisa lebih jelas karena saya tidak mendapatkannya pada awalnya)
/// <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
};
}
dan penggunaannya
var naleznosci = (from nalTmp in db.Naleznosci
where nalTmp.idDziecko == idDziec
select nalTmp).Initializer().ToList();