Skocz do zawartości

LINQ numerowanie wierszy

Polecane posty

Kochane dobre dusze, czy ktos moglby mi w prosty sposob pomoc zmienic pole PozID tak, zeby bylo kolejnym numerem wiersza ?

1

2

...

 

source
     .Where(pozycjeDokumentu => 
     pozycjeDokumentu.Dokument.TransakcjaHandlowa.Rodzaj == 1 &&
     pozycjeDokumentu.Dokument.DataWydaniaWystawienia >= data.Poczatek && 
     pozycjeDokumentu.Dokument.DataWydaniaWystawienia <= data.Koniec &&
     pozycjeDokumentu.Dokument.Symbol == symbol)
     
     .Select((pozycjeDokumentu) => new Wynik
    {
        Id = pozycjeDokumentu.Id,
        KodCN = pozycjeDokumentu.AsortymentAktualny.KodCN.ToString().Replace(" ", ""),
        MasaNetto = pozycjeDokumentu.AsortymentAktualny.PolaWlasneAdv2.D0 * pozycjeDokumentu.Ilosc,
        KrajPochodzenia = pozycjeDokumentu.AsortymentAktualny.PolaWlasneAdv2.L0,
        RodzajTransakcji = "11",
        OpisTowaru = pozycjeDokumentu.AsortymentAktualny.Nazwa,
        PozId = 1,
        WartoscFaktury = pozycjeDokumentu.Wartosc.NettoPoRabacie*pozycjeDokumentu.Dokument.KursWalutyDokumentu.Kurs,
        KrajPrzeznaczeniaWysylki = pozycjeDokumentu.Dokument.AdresDostawPodmiotu.Adres.Panstwo.KodPanstwaUE,
    });

 

Link to postu

Można osiągnąć taki efekt, ale jedynie po stronie klienta, a nie serwera SQL. Oznacza to, że zapytanie musi być wcześniej wykonane, co można osiągnąć np. za pomocą funkcji ToList. Poniżej przykład zapytania z numerem LP w raporcie własnym LINQ opartym na asortymencie.

null;

var queryZmaterializowane = source
    .Select((Asortyment asortyment) => new 
    {
        Id = asortyment.Id,
        Nazwa = asortyment.Nazwa,
        Symbol = asortyment.Symbol
    }).ToList();

int lp = 1;
result = queryZmaterializowane
    .Select(x => new Wynik
    {
        Lp = lp++,
        Id = x.Id,
        Nazwa = x.Nazwa,
        Symbol = x.Symbol
    }).AsQueryable();

Alternatywnym rozwiązaniem jest wykorzystanie raportu SQL i wyrażenia ROW_NUMBER. Wówczas całe zapytanie będzie wykonywane po stronie serwera.

  • Lubię to 1
Link to postu
×
×
  • Dodaj nową pozycję...