LINQ sélection distincte de 4 IEnumerable listes
Imaginer quatre listes, tout au moins avoir cette chaîne d'Id de propriété, mais peut avoir d'autres propriétés:
public class A //or B, C, D
{
public string Id { get; set; }
//..other properties
}
//so:
List<A> a1 = new List<A>();
List<B> a2 = new List<B>();
List<C> a3 = new List<C>();
List<D> a4 = new List<D>();
Je veux sélectionner tous DISTINCTS id:
a1, combiné avec a2, a3 et a4
Je pensais que la syntaxe LINQ serait l'idéal, mais comment les combiner pour un IEnumerable résultat avec une seule chaîne de propriété, par exemple quelque chose avec une définition de classe A.
OriginalL'auteur CRice | 2009-06-09
Vous devez vous connecter pour publier un commentaire.
Sont-ils vraiment toutes les listes du même type? Ou avez-vous des
et que vous souhaitez combiner les deux car tous les 4 types ont en commun une chaîne de propriété Id?
OK, modifier votre montre, j'étais sur la bonne voie. Vous avez besoin d'une Interface qui définit l'Id de chaîne de propriété, et chaque type A, B, C et D doivent implémenter cette Interface.
Chaque liste sera du type d'Interface et la méthode concat réponses de travail.
Si vous ne disposez pas de la capacité à définir l'interface, vous pouvez utiliser LINQ pour interroger chaque liste uniquement le champ Id (vous devriez obtenir
IQueryable<String>
résultats) et puis concat ces résultats.Edit: Voici une requête LINQ qui devrait vous donner ce que vous cherchez:
OriginalL'auteur CoderDennis
Car ils sont de types différents, je voudrais sélectionnez d'abord la propriété Id pour obtenir un IEnumerable<string>, et puis concaténer les résultats:
C'est beaucoup plus lisible qu'à l'aide de la sucrées syntaxe, à mon avis...
OriginalL'auteur CMS
Cela fonctionne aussi:
Il a été précisé après ma réponse que a1, a2, a3 et a4 peuvent avoir des types différents.
Oui, juste vu le modifier...
OriginalL'auteur idursun
Union
Bien sûr, vous pouvez simplifier cette:
Par l'aide de l'Union (ce qui ne implicite 'Distinct'), pour devenir:
OriginalL'auteur Don Gillis
Vous pouvez concat IEnumerables du même type, puis sélectionnez l'élément dont vous avez besoin.
EDIT: Basé sur la nouvelle question... la Sélection de différents types de liste n'est pas possible en une seule requête. La meilleure façon de le faire serait d'avoir un type commun qui inclut la propriété vous êtes à la sélection, puis exécutez la requête ci-dessus avec le type de base.
OriginalL'auteur Cameron MacFarland