2009-04-05 8 views
2

J'ai deux types C# (3.5) différents les uns des autres. Je ne les contrôle pas, donc je ne peux pas les faire hériter d'un type commun ou implémenter une interface. Mais ils sont très similaires en « forme »:Commander deux listes C# différentes avec 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 

Je voudrais faire ce qui suit avec une requête LINQ:

Retour tous les éléments dans les listes myAList et myBList commandés par Name ou Title (ce qui s'applique), le résultat doit être un List<C>ID = Name ou Title et ExtendedData = Data ou OtherStuff

pensées?

Répondre

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, merci pour la réponse. Juste une remarque: Vous avez besoin d'un ensemble supplémentaire de parenthèses: (myAList ... b.OtherStuff})) .OrderBy (c => c.ID) ou OrderBy ne sera pas applicable à la nouvelle liste complète . – MMind

+0

Bon point, ajouté. –

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(); 
Questions connexes