Holen Sie sich jeweils eins

7

Das Ziel

Erhalte jedes Ergebnis, das von foreach zurückgegeben wird.

Das Szenario

Sehen Sie sich das folgende Razor-Code-Fragment an:

%Vor%

Die Rückkehr zum Kunden ist:

  

Xbox 360

     

Xbox 360

     

Xbox 360

     

Xbox 360

     

Playstation 3

     

Playstation 3

     

Playstation 3

Nun, lassen Sie mich erklären: Meine Anwendung vergleicht den Preis von Produkten in verschiedenen Geschäften. In meinem Fall gibt es Xbox 360 in vier Geschäften, während Playstation 3 in drei Geschäften existiert - deshalb wiederholen sich ihre Namen.

Was ich will, ist einfach: Holen Sie sich den Namen jedes Produkts nur einmal, um die Tabellenspalte einer HTML-Tabelle zu füllen - können Sie alle verstehen?

Philosophie

Jedes Produkt wird in der Sitzung hinzugefügt. In unserem Fall gibt es zwei Produkte in der Sitzung - das erste ist Xbox 360 und das zweite ist Playstation 3 . Wie du sehen kannst, kann ich Session verwenden, um mit diesem zu arbeiten ("für jedes Element in der Session, tu etwas ...") , aber ich denke, dass es nicht notwendig ist, weil ich es immer tun werde Ich muss eine Abfrage in der Datenbank ausführen und logischerweise gibt sie mir das zurück, was ich brauche. Mit anderen Worten: Ich muss die Sitzung nicht verwenden, außer um die Daten, die die Benutzer benötigen, vorübergehend zu speichern.

Spotlight

Das Model.Collection.Products hat den Typ List<Products> .

Was habe ich versucht?

In etwa so:

%Vor%

Aber, natürlich, erfolglos. Im Grunde brauche ich etwas wie FirstOfEach() .

    
Guilherme Oderdenge 06.08.2013, 14:45
quelle

5 Antworten

12

Die Lösung

Verwenden Sie eine GroupBy ...

%Vor%

A GroupBy gibt IEnumerable<IGrouping<TKey, TSource>> zurück, wobei die Eigenschaft Key den Wert der Eigenschaft darstellt, nach der Sie gruppieren (in diesem Fall: name )

Andere Vorteile

Der Vorteil dieses Ansatzes besteht darin, dass Sie auch auf die Elemente für jede Gruppe zugreifen können. Wenn Sie beispielsweise die verschiedenen Preise für jede Gruppe auflisten möchten, können Sie beispielsweise Folgendes tun:

%Vor%

(Ich weiß, das ist nicht das beste HTML, es ist nur ein Beispiel für die Verwendung!)

    
musefan 06.08.2013, 14:50
quelle
7

Sie benötigen DistinctBy

%Vor% %Vor%     
I4V 06.08.2013 14:50
quelle
1

Wenn Sie nur die eindeutigen Produktnamen möchten, können Sie eine eindeutige Liste aus der Sammlung extrahieren:

%Vor%     
D Stanley 06.08.2013 14:52
quelle
1

Sie sollten dies in Verbindung mit

implementieren %Vor%

und

%Vor%     
Ehsan 06.08.2013 14:53
quelle
0

Ähnlich wie GroupBy können Sie Ihre Liste auch in Lookup

konvertieren %Vor%     
Konstantin 06.08.2013 15:01
quelle

Tags und Links