Liste unique d'éléments utilisant LINQ
J'ai été à l'aide de LINQ pour un certain temps maintenant, mais semblent être coincé sur quelque chose en ce qui concerne des objets Uniques, j'ai l'folling liste:
List<Stock> stock = new List<Stock>();
Ce a les Propriétés suivantes: string ID , Type de chaîne, chaîne de Description, par exemple:
public class Stock
{
public string ID { get; set; }
public string Type { get; set; }
public string Description { get; set; }
}
Je veux avoir une requête LINQ qui regroupera les articles en Stock par leur Type et leur retour ce qu'une nouvelle Liste de Stock (il doit être du même type que l'original de la Liste de Stock).
De Données, Par Exemple:
ID Type Description
----------------------------------------------
1 Kitchen Appliance Dishwasher
2 Living Room Television
3 Kitchen Appliance Washing Machine
4 Kitchen Appliance Fridge
...
Ma requête Linq veut être en mesure de retourner tous les Appareils de Cuisine par Exemple.
Donc, je voudrais la passer en un "type" dans la requête et il serait de retour les articles 1, 3 et 4
à partir de cet exemple de liste.
Cette liste retournés doivent également être de type: List<Stock>
.
Essentiellement, je veux une liste des objets uniques par type, un peu comme un SQL de la requête Distinct, comment puis-je réaliser cela dans LINQ?
Des solutions alternatives sont très bien mais doit être Silverlight /C# code client.
Juste une autre précision, c'est que j'ai aussi ne peuvent pas fournir le paramètre "Appareil de Cuisine" et souhaite la unique de, par exemple, Il serait de retour Appareil de Cuisine et Salle de Séjour une fois, chaque seule à peu comme une catégorie peu importe le nombre de ce Type il y a des.
source d'informationauteur RoguePlanetoid
Vous devez vous connecter pour publier un commentaire.
Approche Flexible
Utilisation
Groupe
etToDictionary
pour créer un dictionnaire deList<Stock>
les valeurs de la clé sur laType
propriété:Vous pouvez ensuite utiliser les types eux-mêmes ainsi que une liste de tout type assez facilement:
Cette approche prend vraiment soin de tous vos besoins, comme je le vois. Mais pour certaines autres options, voir ci-dessous.
Suppléant (quick & sale) approche
Vous pouvez toujours utiliser
pour obtenir les éléments du type que vous voulez, puis
ToList
de mettre ces éléments dans une nouvelleList<Stock>
:En réponse à cette dernière partie:
Ici, vous semblez vouloir quelque chose de complètement différent: fondamentalement le comportement fournis par
Distinct
. Pour cette fonctionnalité, vous pouvez essentiellement aller avec Soonts réponse (éventuellement, au retour d'uneIEnumerable<tKey>
au lieu deIEnumerable<tSource>
), ou vous pouvez simplement tirer parti deDistinct
en combinaison avecSelect
pour éviter la nécessité de mettre en œuvre unIEqualityComparer<Stock>
(voir ci-dessous).Mise à jour
En réponse à vos éclaircissements, voici ma recommandation: deux méthodes, une pour chaque usage (Principe De Responsabilité Unique):
Sonne comme une simple clause where nécessaire.
Si vous voulait strictement la
Types
figurant dans la liste source:string[] typesFound = stock.Select(s=>s.Type).Distinct().ToArray();
Je n'ai probablement pas compris la question, mais cela me semble assez simple Linq-requête:
ou si vous préférez l'extension de la méthode de syntaxe:
Ce que je ne comprends pas, c'est votre utilisation de distinct et unique dans ce contexte. Les objets sont déjà unique, et il me semble que vous voulez une requête de base "donnez-moi tous les appareils de cuisine".
Vous pouvez aussi faire quelque chose le long de ces lignes, dans ce cas, je suis prise de lucene résultats tirant hors umbraco des nœuds à un type anonyme