2016-04-02 4 views
0

Sagen wir, ich habe Paare (in der Liste) so: [{a, 15}, {b, null}, {a , null}]C# LINQ - Get Paare, wenn der zweite Wert in allen Paaren Null ist, die den gleichen ersten Wert haben

Jedes Paar hat einen Zeichenschlüssel und einen Nullwert. Ich möchte alle Paare auswählen, in denen die Liste kein anderes Paar mit demselben Schlüssel und einem Nicht-Null-Wert enthält.

In meiner obigen Beispielliste möchte ich nur {b, null} erhalten, weil 'a' im ersten Paar einen Wert ungleich Null hat. Wie würde ich das mit LINQ machen?

+0

Also wollen Sie das erste Paar, das einen anderen Wert als der davor hat? –

+0

Meinst du, du willst {a, null} bekommen? –

+0

Nein, ich zeige Ihnen ein anderes Beispiel, es sollte dann klar sein: [{a, null}, {b, null}, {c, null}, {a, 6}, {d, 5}, { d, null}, {e, null}] und ich möchte erhalten {b, null}, {c, null}, {e, null} – danad02

Antwort

0

Sie verwenden können, bekommen die Where Funktion, um die Elemente auszuwählen, während die Any mit Funktion, um die Existenz von Paaren mit demselben Schlüssel und Nicht-Null-Werten zu prüfen. Hier ist ein Beispiel:

class Pair 
{ 
    public char Key { get; set; } 
    public int? Value { get; set; } 
} 

var pairs = new[] { new Pair { Key = 'a', Value = 15 }, 
        new Pair { Key = 'b', Value = null }, 
        new Pair { Key = 'a', Value = null } 
} 

var nullOnlyPairs = pairs.Where(p => !pairs.Any(a => a.Key == p.Key && a.Value != null)); 
0

Sagen wir Liste (Variablenname Artikel) ist eine Sammlung als (chr, Id) dann folgende Linq verwenden Ihr Ergebnis

 var result = (from t1 in items 
         group t1 by t1.chr into t2 
         where t2.Count(p => p.Id!= null) == 0 
         select new 
         { 
          chr = t2.Key, 
          Id = t2.Select(p => p.Id).FirstOrDefault() 
         }).ToList(); 
0

Angenommen, Ihr Listenelement hat zwei Felder (Schlüssel, Wert), können Sie dies tun.

var output = items.GroupBy(c=>c.Key) // Group by Letter 
        .Where(c=>!c.Any(e=>e.Value != null)) // Verify each Key has any other value than Null 
        .Select(c=>c.First()); 
Verwandte Themen