2017-12-05 1 views
-1
public class P 
{ 
public string Name {get; set;} 
public string Value {get; set;} 
public Student Student {get; set;} 
} 

List<P> p = new List<P>(); 
p.Add(new P{Name = "1", Value = null, Student = new Student{Name = "1"}}) 
p.Add(new P{Name = "1", Value = null, Student = new Student{Name = "1"}})   
p.Add(new P{Name = "1", Value = null, Student = new Student{Name = "1"}}) 
p.Add(new P{Name = "1", Value = null, Student = new Student{Name = "1"}}) 
p.Add(new P{Name = "2", Value = null, Student = new Student{Name = "2"}}) 
p.Add(new P{Name = "1", Value = "xxx", Student = new Student{Name = "2"}}) 

ich gruppieren möchten von P.Name und erhalten nur die Elemente null ist, die alle den fehlenden Wert für P.Value haben.Linq: überprüfen, ob einer der Eigenschaft in einer Liste für alle Objekte

In diesem Beispiel würde Ich mag „1“

Und wenn ich für P.Student.Name zum Gruppieren bekommen?

+0

Ich habe beide versucht, mit Linq Expression und dem anderen Linq mit GroupBy und Select aber .. mmm – Revious

+1

So etwas wie p.Where (tek => tek.Value == null) .GroupBy (tek => tek .Name)? – bamanow

Antwort

5

Sie können eine GroupBy verwenden zusammen mit einem All fro jeder Gruppe:

var r = p.GroupBy(x => x.Name) 
    .Where(g => g.All(x => x.Value == null)) 
    .Select(g=> g.Key); 

Edit: Wenn Sie zum Gruppieren von Student.Name Sie geben gerade diese Eigenschaft in der GroupBy. Sie können einen beliebigen Ausdruck basierend auf dem Element angeben, das zum Gruppieren verwendet werden soll.

var r = p.GroupBy(x => x.Student.Name) 
    .Where(g => g.All(x => x.Value == null)) 
    .Select(g=> g.Key); 
+0

Vielen Dank. Ich werde ein zweites Beispiel hinzufügen, das sehr ähnlich ist. Könnten Sie bitte auch diese Variante beantworten? – Revious

+2

Sicher, wenn es ähnlich ist, kein Problem –

+1

@Revious Das klingt wie es sollte eine neue Frage sein. – juharr

Verwandte Themen