2009-05-01 8 views
4

Ich versuche mein Bestes, um LINQ zu lernen, aber ich habe immer noch eine harte Zeit, es zu codieren. Angenommen, ich habe einen Datensatz oder eine Liste, und die Namen oder Felder des Sammlungsobjekts sind die Spaltennamen.Noob in linq, Auswahl der ersten Datensatz von jedem Datensatz mit dem gleichen Wert

Id | Datum | Mo | Di | Mi | Do | Fr | Sa | So | Count

1 | 01/05 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 < - (1)

2 | 02/02 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 ** | - (2)

3 | 03/02 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 ** | - (2)

4 | 04/06 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 < - (1)

5 | 05/04 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 ** | - (3)

6 | 06/01 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 ** | - (3)

7 | 07/06 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 < ---- (1)

8 | 08/03 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

9 | 09/07 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

10 | 10/05 | 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

Alles, was ich will, ist zunächst die ganze Zahl zu erhalten (1) 's dann dem (2) weil sie zu den ersten gehören (1). Als nächstes die Gruppe von (3), weil sie zu der zweiten (1) gehören. Letzten die Gruppe von (4), weil sie zu den letzten (1) gehören.

bitte helfen.

- Frage umformuliert. 1. Wie kann ich die erste Gruppe von 5's bekommen, dann die Gruppe von 7's und die letzte Gruppe von 4's?

+0

Wie gehen die (1) 's und (2)' Angenommen s (sic) gehören zu den ersten (1). Ich kann diese Frage nicht verstehen. – spender

+0

Ihre Frage ist nicht klar. Bitte erläutern Sie, wie Ihre Daten so strukturiert sind, dass ein Zeilensatz zu einem anderen "gehört". –

+0

@spender und joe, sorry für meine unklare Frage. Ich habe es einfach umformuliert. Wie auch immer, ich möchte nur die drei Gruppen, die 5, 7 und 4 sind. – grayman

Antwort

5

Es scheint, dass Sie nach Anzahl sortieren möchten.

Wenn Sie sagen "Holen Sie sich die erste Gruppe von 5" was meinst du - welche Daten möchten Sie erhalten?

UPDATE nach Klärung

public class Row 
{ 
    public int ID{get;set;} 
    public string Date{get;set;} 
    public int Count{get;set;} 
} 

Row r1 = new Row{ID=1, Date="01/01/01", Count=5}; 
Row r2 = new Row{ID=2, Date="01/02/01", Count=5}; 
Row r3 = new Row{ID=3, Date="01/03/01", Count=5}; 
Row r4 = new Row{ID=4, Date="01/04/01", Count=7}; 
Row r5 = new Row{ID=5, Date="01/05/01", Count=7}; 
Row r6 = new Row{ID=6, Date="01/06/01", Count=7}; 
Row r7 = new Row{ID=7, Date="01/07/01", Count=4}; 
Row r8 = new Row{ID=8, Date="01/08/01", Count=4}; 
Row r9 = new Row{ID=9, Date="01/09/01", Count=4}; 
Row r10 = new Row{ID=10, Date="01/01/01", Count=4}; 

List<Row> rows = new List<Row>{r1,r2,r3,r4,r5,r6,r7,r8,r9,r10}; 

Dann

// We will assign results of our query to this variable 
var result = 

// rows is a generic list of Row objects 
rows     

    // This splits the list into seperate categories organised by Count 
    // After the GroupBy, we have an IEnumerable<IGrouping<Int32, Row>> - that is, a collection of collections of items sharing a common key (in this case Count) 
    .GroupBy(r=>r.Count) // r is of type Row 

    // Now we are simply selecting the first item of each subgroup. 
    .Select(g=>g.First()) // g is IGrouping<Int32,Row>, g.First() is of type Row 
    ; 

Gewährt

ID Date  Count 
    1 01/01/01 5 
    4 01/04/01 7 
    7 01/07/01 4 
+0

@joe, die ganze Zeile, wenn es ein Datensatz ist. – grayman

+0

Oder das ganze Objekt, wenn es ein Mitglied einer Liste ist grayman

+0

Sorry, verstehe ich immer noch nicht. Da es mehrere Zeilen mit derselben Anzahl gibt, was meinst du die ganze Zeile? Können Sie ein Beispiel für die erwartete Ausgabe hinzufügen? –

Verwandte Themen