Ad.1.
source
.Select((PozycjaDokumentu pozycjaDokumentu) => new Wynik
{
Id = pozycjaDokumentu.Id,
Nazwa = pozycjaDokumentu.AsortymentAktualny.Nazwa,
ilosc = pozycjaDokumentu.Ilosc,
CenaPozycji = pozycjaDokumentu.Wartosc.BruttoPrzedRabatem,
SymbolTowaru = pozycjaDokumentu.AsortymentAktualny.Symbol,
})
.GroupBy(p => p.SymbolTowaru)
.Select(group => new Wynik
{
Id = group.Select(i => i.Id).FirstOrDefault(),
Nazwa = group.Select(i => i.Nazwa).FirstOrDefault(),
ilosc = group.Sum(i => i.ilosc),
CenaPozycji = group.Sum(i => i.CenaPozycji),
SymbolTowaru = group.Key,
})
Ad.2. Moim zdaniem lepiej użyć pozycji dokumentu, bo:
a) jest prościej
b) przy zachowaniu idów pozycji zachowuje się funkcje pokazywania/poprawiania towarów w wynikach raportu.