Benutzer mit den meisten Antworten
Liste<>sortieren. Elemente mit gleicher Name nur einmal darstellen mit gesamtMenge

Frage
-
Hallo,
Ich möchte Elemente in einer Datagrid darstellen. Aber ich möchte das Elemente mit gleichem Name nur einmal in datagrid mit der Gesamt Menge(Menge von alle Elemente mit gleichem Name) in datagrid dargestellt wird.
Ich habe eine Liste wie folgt:
public List<Position> itempositionen { get; set; }
Die Position-Klasse hinzu ist wie folgt aufgebaut:
public class Position { public string Artikelnummer { get; set; } public decimal Menge { get; set; } public int PosID { get; set; } }
Die function dazu
var Positionen = BelegePositionen.ToList(); if (Positionen.Count > 1) { itempositionen = new List<Position>(); Position _pos = new Position(); _pos.Artikelnummer = string.Empty; _pos.PosID = 0; _pos.Menge = 0; foreach (var itempos in Positionen) { if (itempos.Artikelnummer == _pos.Artikelnummer && itempos.PosID != _pos.PosID) { _pos.Artikelnummer = itempos.Artikelnummer; _pos.Menge = itempos.Lagermenge.GetValueOrDefault() + _pos.Menge; } else { _pos.Artikelnummer = itempos.Artikelnummer; _pos.Menge = itempos.Lagermenge.GetValueOrDefault(); } itempositionen.Add(_pos); }
zu meinen Problem:
Ich möchte, dass Positionen mit dem Gleichen Artikelnummer in meine Liste nur einmal dargestellt werden aber mit der gesamt Menge. Momentan werden alle Positionen in meiner Liste addiert. bei Nächste position mit Glicher Artikelnummer Wird nur die Menge addiert.
Kann mir Jemand veilleicht Helfen?
Ich danke euch mit voraus
Lg
Antworten
-
Hallo Matsak,
gucke dir mal das an, so hätte ich es gelöst:
var positionen = itempositionen.GroupBy(x => x.Artikelnummer).Select(x => new { Artikelnummer = x.First().Artikelnummer, Menge = x.Sum(y => y.Menge), });
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Matsak Montag, 8. Februar 2016 07:08
-
Hallo zusammen,
so gibt's direkt eine List<Position> ...
Gruß, K.int n = 1;
List<Position> itempositionen = Positionen.GroupBy(x => x.Artikelnummer).Select(x =>
new Position() {
Artikelnummer = x.First().Artikelnummer,
PosID = n++,
Menge = x.Sum(y => y.Menge)
}
).ToList<Position>();
- Als Antwort markiert Matsak Montag, 8. Februar 2016 07:09
-
Natürlich, ein Beispiel:
foreach (var itempos in Positionen.Select(x=>Artikelnummer).Distinct()) { //... _pos.Menge = Positionen.Where(item => item.Artikelnummer == itempos.Artikelnummer).Sum(item => item.Menge); }
Geht sicher auch noch in zahlreichen anderen Variationen
Gruß
- Florian
- Als Antwort markiert Matsak Montag, 8. Februar 2016 07:09
Alle Antworten
-
Hallo Matsak,
sieh Dir dazu Distinct und Sum an.
Gruß
- Florian
- Bearbeitet Florian Haupt Freitag, 5. Februar 2016 15:37 + Sum
-
Mit Sum über die Elemente in deiner Liste mit der dazugehörigen Artikelnummer.
Du könntest aber auch beim Aufbau der Liste (Exists) prüfen ob es die Artikelnummer schon gibt und statt einen neuen Eintrag zu machen die Menge des vorhandenen anpassen.
- Florian
-
Hallo Matsak,
gucke dir mal das an, so hätte ich es gelöst:
var positionen = itempositionen.GroupBy(x => x.Artikelnummer).Select(x => new { Artikelnummer = x.First().Artikelnummer, Menge = x.Sum(y => y.Menge), });
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Matsak Montag, 8. Februar 2016 07:08
-
Hallo zusammen,
so gibt's direkt eine List<Position> ...
Gruß, K.int n = 1;
List<Position> itempositionen = Positionen.GroupBy(x => x.Artikelnummer).Select(x =>
new Position() {
Artikelnummer = x.First().Artikelnummer,
PosID = n++,
Menge = x.Sum(y => y.Menge)
}
).ToList<Position>();
- Als Antwort markiert Matsak Montag, 8. Februar 2016 07:09
-
Natürlich, ein Beispiel:
foreach (var itempos in Positionen.Select(x=>Artikelnummer).Distinct()) { //... _pos.Menge = Positionen.Where(item => item.Artikelnummer == itempos.Artikelnummer).Sum(item => item.Menge); }
Geht sicher auch noch in zahlreichen anderen Variationen
Gruß
- Florian
- Als Antwort markiert Matsak Montag, 8. Februar 2016 07:09