2008-11-10 3 views
5

noch neu in der Welt von Linq, und ich brauche etwas Hilfe Abflachung einer Liste von Eltern, die Kinder haben, in eine einzige Liste von ParentChild.Linq Abfrage, um eine abgefakte Liste von Eltern Kind

Genau wie folgt aus:

class Program 
{ 
    static void Main() 
    { 
     List<Parent> parents = new List<Parent>(); 

     parents.Add(new Parent { Name = "Parent1", Children = new List<Child> { new Child { Name = "Child1" }, new Child { Name = "Child2" } } }); 
     parents.Add(new Parent { Name = "Parent2", Children = new List<Child> { new Child { Name = "Child3" }, new Child { Name = "Child4" } } }); 

     // linq query to return List<ParentChild> parentChildList; 
     // ParentName = Parent1, ChildName = Child1 
     // ParentName = Parent1, ChildName = Child2 
     // ParentName = Parent2, ChildName = Child3 
     // ParentName = Parent2, ChildName = Child4 
    } 

    internal class ParentChild 
    { 
     public string ParentName { get; set; } 
     public string ChildName { get; set; } 
    } 

    internal class Parent 
    { 
     public string Name { get; set; } 
     public List<Child> Children { get; set; } 
    } 

    internal class Child 
    { 
     public string Name { get; set; } 
    } 
} 

Vielen Dank, Chris

Antwort

13
from parent in parents 
from child in parent.Children 
select new ParentChild() { ParentName = parent.Name, ChildName = child.Name }; 
+0

Wie würde ich gehen über die Bindung an eine DataGridView in einer Windows-Anwendung, habe ich versucht grdTerminals.DataBindings.Add ("TerminalName", Datenquelle, "Terminal"); aber das gibt eine leere Zeichenfolge zurück –

3

Dies sollte es für Sie tun:

var k = from p in parents 
     from c in p.Children 
     select new {Name = p.Name, Child = c.Name }; 

EDIT: Upps vergessen haben, eine neue Parentchild zurückzukehren Objekt. aber Kent hat mich dazu geschlagen;)