2009-04-05 10 views
2

Ich habe zwei C# (3.5) -Typen, die sich voneinander unterscheiden. Ich kontrolliere sie nicht, also kann ich sie nicht von einem gewöhnlichen Typ erben lassen oder eine Schnittstelle implementieren. Aber sie sind sehr ähnlich in der „Form“:Bestellen Sie zwei verschiedene C# -Listen mit LINQ

class A 
{ 
string Name 
string Data 
} 

class B 
{ 
string Title 
string OtherStuff 
} 

class C 
{ 
string ID 
string ExtendedData 
} 

List<A> myAList 
List<B> myBList 

würde Ich mag die folgende mit einer LINQ-Abfrage tun:

Rückkehr aller Elemente in Listen myAList und myBList geordnet nach Name oder Title (was auch immer gilt) muss das Ergebnis ein List<C> wo ID = Name oder Title und ExtendedData = Data oder OtherStuff sein

Gedanken?

Antwort

7
var myCList = (myAList.Select(a => new C 
    { ID = a.Name, ExtendedData = a.Data }) 
    .Union(myBList.Select(b => new C 
     { ID = b.Title, ExtendedData = b.OtherStuff })) 
    .OrderBy(c => c.ID) 
    .ToList(); 
+0

Chris, danke für die Antwort. Nur eine Anmerkung: Sie benötigen einen zusätzlichen Satz von Klammern: (myAList ... b.OtherStuff})) .OrderBy (c => c.ID) oder die OrderBy nicht auf die volle neue Liste anwenden . – MMind

+0

Guter Punkt, hinzugefügt. –

1
var result = (
    from a in myAList 
    select new C { ID = a.Name, ExtendedData = a.Data } 
).Union(
    from b in myBList 
    select new C { ID = b.Title, ExtendedData = b.OtherStuff } 
).OrderBy(e => e.ID).ToList(); 
Verwandte Themen