none
den ersten eintrag von Listen in einer Liste in anderer Listen Liste speichern RRS feed

  • Frage

  • Hallo

    wie kann ich den ersten eintrag von Listen in einer Liste in einer anderen Listen Liste speichern?

    so hier die herkömmliche Version - wie gehts es besser?

                        foreach( var xx in foo.Distinct())
                        {
                            var cc = xx.ToList().FirstOrDefault();
                            hvTestTypes.Add(cc);
                        }

    Danke

    funktionale programmierung den ersten eintrag einer Liste in liste speichern

    Freitag, 10. November 2017 16:32

Antworten

  • Moinsen,

    vielleicht solltest du mal etwas konkreter werden, was du machen willst, was schon geht und was noch nicht geht. Die früheren Anmerkungen zu Distinct() gelten übrigens weiterhin.

    Gib doch mal ein konkretes Beispiel, was ist "tab1", "tab2" und wie sieht T aus?

    Wie soll dein Ergebnis aussehen?

    Nachtrag, vielleicht so?:

    var res1 = tab1
       .Where(t1 => t1.xID == 136 )
       .Join(tab2, x => x.xID, y => y.ID, (x, y) => 
          new { x.xID, x.yID, y.Comment, y.TestName })
       .GroupBy(a => a.xID + a.Comment + a.TestName)
       .Select( g => g.FirstOrDefault())
    .ToList();

    Gruß





    Montag, 13. November 2017 11:19

Alle Antworten

  • Hallo,

    so ganz klar ist mit nicht geworden, was du machen möchtest; dies hier macht ungefähr erst mal, was dein Code im Ergebnis auch macht. Damit erhältst du eine Liste aus den ersten Elementen der Listen deiner Ursprungs-"Listen-Liste":

    var hvTestTypes = foo.Select(x => x[0]).ToList();

    Hier: xx.ToList().FirstOrDefault()  ...  xx ist doch bereits eine Liste, oder? xx[0] sollte reichen.

    Du fragst: ... in einer anderen Listen Liste speichern? ...

    Also willst du eine neue "Listen-Liste" erstellen mit Listen, die jeweils nur das erste Element der Listen der Ursprungs-Listen-Liste enthalten?

    Dann wäre dies besser:

    var linqListe = foo.Select(x => new List<object> { x[0] }).ToList();

    Das .Distinct() kann bei Bedarf eingefügt werden (nach foo).

    Nun, wie auch immer, vielleicht hilft eine der Varianten schon mal weiter.

    ;-)

    Gruß

    Sonntag, 12. November 2017 01:19
  • Moin.

    foo.Distinct()) hat mehrere Listen, die vom Type gleich sind.

    Ich will jeweils einen Eintrag, z.b. den ersten, in einer neuen Liste.

    Sowas passiert wenn man mit Linq distinct arbeitet - keine Ahnung, vielleicht gehts auch besser...

    MfG

    Sonntag, 12. November 2017 13:38
  • Hi,
    distinct ohne weitere Parameter bringt als erstes Element immer das erste Element einer Liste. Wozu benötigst Du dann distinct?

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Sonntag, 12. November 2017 14:05
  • Hi,
    distinct ohne weitere Parameter bringt als erstes Element immer das erste Element einer Liste. Wozu benötigst Du dann distinct?

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    warum auch immer, durch das gruppieren vorher, habe ich nehrere Listen

    Sonntag, 12. November 2017 18:12
  • Hi,
    auch nach dem Gruppieren kommt die Gruppe des ersten Datenobjektes. Also bleibt die Frage: Wozu benötigt man Distinct, wenn man nur das erste Element holt.?

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Sonntag, 12. November 2017 18:56
  • Moinsen,

    foo.Distinct()) hat mehrere Listen, die vom Type gleich sind....

    demnach ist dein Ausgangsobjekt foo eine List<List<T>>. Distinct() greift so meines Erachtens nur, falls zwei (oder mehrere) Listen dieselbe Objektreferenz haben. Es wurde ja schon darauf hingewiesen. foo's Elemente sind doch vom Type List<T>? Dann solltest du doch noch mal prüfen, wie Distinct() arbeitet und ob du nicht vielleicht doch einen IEqualityComparer benötigst.

    Ich will jeweils einen Eintrag, z.b. den ersten, in einer neuen Liste.

    Hast du denn mal meine Vorschläge oben ausprobiert? Du hast ja eine Ausgangsliste foo, wie soll denn deine Ergebnisliste nun aussehen. So: result = List<T> oder so: result = List<List<T>>?

    Sowas passiert wenn man mit Linq distinct arbeitet

    ... ?

    - keine Ahnung, vielleicht gehts auch besser...

    Gruß

    Sonntag, 12. November 2017 19:14
  • Moin,

    bei mir ist

    result = List<List<T>>

    meine linq

    from p in tab1
        join bp in tab2 on p.xID equals bp.ID
        where (p.yId == 136)
        select new
        {
        y = p.yId,
        xID = p.xID,
            Comment = bp.Comment,
            TestName = bp.TestName,
        }  into g
    group g by g.xID + g.Comment + g.TestName into rg  
    select rg.Distinct()


    • Bearbeitet UMorgenw Montag, 13. November 2017 09:52
    Montag, 13. November 2017 08:12
  • Moinsen,

    vielleicht solltest du mal etwas konkreter werden, was du machen willst, was schon geht und was noch nicht geht. Die früheren Anmerkungen zu Distinct() gelten übrigens weiterhin.

    Gib doch mal ein konkretes Beispiel, was ist "tab1", "tab2" und wie sieht T aus?

    Wie soll dein Ergebnis aussehen?

    Nachtrag, vielleicht so?:

    var res1 = tab1
       .Where(t1 => t1.xID == 136 )
       .Join(tab2, x => x.xID, y => y.ID, (x, y) => 
          new { x.xID, x.yID, y.Comment, y.TestName })
       .GroupBy(a => a.xID + a.Comment + a.TestName)
       .Select( g => g.FirstOrDefault())
    .ToList();

    Gruß





    Montag, 13. November 2017 11:19