Utiliser LINQ pour regrouper des données provenant de DataTable
Je veux utiliser LINQ pour regrouper des données à partir d'un DataTable (colonnes: nom d'utilisateur, chargetag, charge).
Le contenu pourrait ressembler à ceci:
userid chargetag charge
-----------------------------
user1 tag3 100
user2 tag3 100
user3 tag5 250
J'ai besoin de quelque chose comme cela comme un résultat:
chargetag count sum
-------------------------
tag3 2 200
tag5 1 250
C'est ce que j'ai à ce jour:
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
let count = g.Count()
select new
{
ChargeTag = g.Key,
Count = count,
};
Je peux extraire le nom de la chargetag et le nombre d'.
Comment aurais-je modifier la requête LINQ pour accéder à la somme des charges ainsi?
Merci d'avance 🙂
Ce qui concerne,
Kevin
OriginalL'auteur bitfrickler | 2010-09-30
Vous devez vous connecter pour publier un commentaire.
C'est assez facile - il suffit d'utiliser la
Sum
méthode d'extension sur le groupe.(J'ai enlevé le
let
clause ici que ce n'était pas vraiment acheter quelque chose.)Maintenant que peut être inefficace; il peut finir par regroupement de deux fois afin d'effectuer les deux opérations d'agrégation. Vous pourrait correctif comme avec une requête de poursuite de ce genre, si vous le voulez bien:
Ou avec un
let
clause de la place:Fonctionne parfaitement (bien sûr 😉 ) Merci encore!
Skeet: Ce qui est pour moi une bonne manière de saisir tout ce LINQ des trucs? J'ai vos
C# In Depth
livre, mais je me suis perdu dans le LINQ section (comme ton exemple ci-dessus). Le reste du codage des choses n'est pas trop mauvais.Eh bien, il existe différents livres LINQ... ou vous pourriez, comme mon Edulinq série de blog: msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx
Quelqu'un peut-il me donner le code en VB? J'ai essayé de les convertisseurs en ligne, mais j'obtiens une erreur "" En "attendu".
OriginalL'auteur Jon Skeet