Witam,
Mam problem z zapytaniem linq, które mapuje dane z bazy na moje klasy, co w nim może być nie tak?
Wyświetlany komunikat
Składnik LINQ to Entities nie może rozpoznać metody „System.Collections.Generic.List`1[FakturyEdi.Models.PozycjaViewModel] ToList[PozycjaViewModel](System.Collections.Generic.IEnumerable`1[FakturyEdi.Models.PozycjaViewModel])” i nie można przetłumaczyć jej na wyrażenie magazynu.
kod źródlowy
public ZamowienieViewModel GetZamowienieById(int id)
{
using (var db = _context.CreateNew())
{
var query = db.Zamowienia
.Where(x => x.ZamowienieID == id)
.Select(x => new ZamowienieViewModel
{
ZamowienieId = x.ZamowienieID,
NrZamowienia = x.NrZamowienia,
DataSprzedazy = x.DataSprzedazy,
DataZamowienia = x.DataZamowienia,
Faktura = new FakturaViewModel
{
FakturaId = x.Faktury.FakturaID,
NrFaktury = x.Faktury.NrFaktury,
Nip = x.Faktury.Nip,
DataWystawienia = x.Faktury.DataWystawienia,
TerminZaplaty = x.Faktury.TerminZaplaty,
Adres = new AdresViewModel
{
AdresId = x.Faktury.Adres.AdresID,
Imie = x.Faktury.Adres.Imie,
Nazwisko = x.Faktury.Adres.Nazwisko,
Ulica = x.Faktury.Adres.Ulica,
NrDomu = x.Faktury.Adres.NrDomu,
KodPocztowy = x.Faktury.Adres.KodPocztowy,
Miasto = x.Faktury.Adres.Miasto,
Kraj = x.Faktury.Adres.Kraj
}
},
Klient = new KlientViewModel
{
KlientId = x.Klienci.KlientID,
NrKlienta = x.Klienci.NrKlienta,
Nip = x.Klienci.Nip,
Adres = new AdresViewModel
{
AdresId = x.Klienci.Adres.AdresID,
Imie = x.Klienci.Adres.Imie,
Nazwisko = x.Klienci.Adres.Nazwisko,
Ulica = x.Klienci.Adres.Ulica,
NrDomu = x.Klienci.Adres.NrDomu,
KodPocztowy = x.Klienci.Adres.KodPocztowy,
Miasto = x.Klienci.Adres.Miasto,
Kraj = x.Klienci.Adres.Kraj
}
},
Sprzedawca = new SprzedawcaViewModel
{
SprzedawcaId = x.Sprzedawcy.SprzedawcaID,
NrSprzedawcy = x.Sprzedawcy.NrSprzedawcy,
Nip = x.Sprzedawcy.Nip,
Adres = new AdresViewModel
{
AdresId = x.Sprzedawcy.Adres.AdresID,
Imie = x.Sprzedawcy.Adres.Imie,
Nazwisko = x.Sprzedawcy.Adres.Nazwisko,
Ulica = x.Sprzedawcy.Adres.Ulica,
NrDomu = x.Sprzedawcy.Adres.NrDomu,
KodPocztowy = x.Sprzedawcy.Adres.KodPocztowy,
Miasto = x.Sprzedawcy.Adres.Miasto,
Kraj = x.Sprzedawcy.Adres.Kraj
}
},
Pozycje = x.PozycjeZamowienia.Select(y => new PozycjaViewModel //gdzieś tutaj jest problem
//bróbowałem także db.PozycjeZamowienia.Where(z => z.ZamowienieID == x.ZamowienieID).Select(y => new PozycjaViewModel
{
PozycjaId = y.PozycjaID,
Ilosc = y.Ilosc,
CenaBrutto = y.CenaBrutto,
DataDostawy = y.DataDostawy,
Rabat = y.Rabat,
Produkt = new ProduktViewModel
{
ProduktId = y.Produkty.ProduktID,
Nazwa = y.Produkty.Nazwa,
Vat = y.Produkty.Vat,
CenaNetto = y.Produkty.CenaNetto,
Opis = y.Produkty.Opis,
Dostawca = new DostawcaViewModel
{
DostawcaId = y.Produkty.Dostawcy.DostawcaID,
NrDostawcy = y.Produkty.Dostawcy.NrDostawcy,
Nip = y.Produkty.Dostawcy.Nip,
Adres = new AdresViewModel
{
AdresId = y.Produkty.Dostawcy.Adres.AdresID,
Imie = y.Produkty.Dostawcy.Adres.Imie,
Nazwisko = y.Produkty.Dostawcy.Adres.Nazwisko,
Ulica = y.Produkty.Dostawcy.Adres.Ulica,
NrDomu = y.Produkty.Dostawcy.Adres.NrDomu,
KodPocztowy = y.Produkty.Dostawcy.Adres.KodPocztowy,
Miasto = y.Produkty.Dostawcy.Adres.Miasto,
Kraj = y.Produkty.Dostawcy.Adres.Kraj
}
}
}
}).ToList()
}).SingleOrDefault();
return query;
}
}
Drugi problem jest taki że nie potrafię obsłużyć sytuacji gdy wartość pola wynosi null, w jaki sposób to zrobić inaczej?
Aktualnie mam tak.
Faktura = x.FakturaID == null ? null : new FakturaViewModel
{
FakturaId = x.Faktury.FakturaID,
NrFaktury = x.Faktury.NrFaktury,
Nip = x.Faktury.Nip,
DataWystawienia = x.Faktury.DataWystawienia,
TerminZaplaty = x.Faktury.TerminZaplaty,
Adres = new AdresViewModel
{
AdresId = x.Faktury.Adres.AdresID,
Imie = x.Faktury.Adres.Imie,
Nazwisko = x.Faktury.Adres.Nazwisko,
Ulica = x.Faktury.Adres.Ulica,
NrDomu = x.Faktury.Adres.NrDomu,
KodPocztowy = x.Faktury.Adres.KodPocztowy,
Miasto = x.Faktury.Adres.Miasto,
Kraj = x.Faktury.Adres.Kraj
}
},
Być może źle mapuje dane, komplikując to takim wielkim zapytaniem LINQ, zam wymyśliłem taki sobie sposób.
Może jest lepszy sposób na zrobienie tego?