LINQ Obtenir des valeurs Distinctes et remplissage de la LISTE
Je suis en train de voir si je peux utiliser LINQ pour me fournir les valeurs distinctes de certaines données que j'ai dans une Table de données (Prénom, Nom, QUANTITÉ). Je peux obtenir les valeurs distinctes et remplir ma Liste, mais je dois exécuter deux requêtes LINQ pour l'obtenir....Je suis sûr qu'il y est une meilleure façon de le faire 🙂
Toutes les suggestions sont grandement appréciés (très LINQ)
Code:
public static List<StudentData> LinqDistinct(DataTable dt)
{
DataTable linqTable = dt;
//get the distinct values
var query =
(from names in dt.AsEnumerable()
select new {
FirstName = names.Field<string>("FirstName"),
LastName = names.Field<string>("LastName")
}).Distinct();
//fill my list with the distinct values
List<StudentData> sList = (from sa in query.AsEnumerable()
select new StudentData
{
FirstName = sa.FirstName,
LastName = sa.LastName
//Qty = names.Field<int>("Qty")
}).ToList();
return sList;}
OriginalL'auteur scarpacci | 2009-11-23
Vous devez vous connecter pour publier un commentaire.
Aucune raison de ne pas simplement faire de la projection après l'distincts, vous pouvez avoir besoin d'une AsEnumerable() après l'Distincts, mais ce n'est pas une grosse affaire.
OriginalL'auteur ShuggyCoUk
Il n'est pas clair à partir de votre question de savoir si la quantité est une valeur dans votre DataTable, ou le nombre de doublons pour un élément donné, comme dans Ecyrb de réponse. Toutefois, si votre
StudentData
classe implémenteIEquatable<StudentData>
ou remplace la méthode Equals, cela devrait fonctionner:Si
StudentData
ne supporte pas la comparaison de la valeur, et vous ne pouvez pas ajouter que le soutien de la classe, vous pourriez avoir à créer une mise en œuvre deIEqualityComparer<StudentData>
et le passer dans laDistinct
méthode.+1 je pense que c'est votre meilleur pari...
Cela a fonctionné! Merci Joël!
OriginalL'auteur Joel Mueller
Assez sûr que vous pourriez faire ce...
Le ci-dessus n'est toujours pas me donner les lignes distinctes que je cherchais...merci pour la réponse 🙂 S
OriginalL'auteur bytebender
Vous pouvez utiliser
GroupBy
:OriginalL'auteur Ecyrb