80 votes

Linq distinct - Count

Je suis à la recherche pour effectuer une requête sur un exemple de liste d'objets

  • Date - Nom D'Utilisateur

01/01/2011 james

01/01/2011 jamie

01/01/2011 alex

01/01/2011 james

02/01/2011 matt

02/01/2011 jamie

02/01/2011 alex

02/01/2011 james

02/01/2011 james

02/01/2011 lucy

02/01/2011 alex

03/01/2011 james

03/01/2011 bob

03/01/2011 bob

03/01/2011 james

03/01/2011 james

04/01/2011 alex

04/01/2011 alex

04/01/2011 alex

J'ai besoin d'une requête linq qui va me donner la liste des dates avec le nombre de connexions de l'utilisateur.

Par exemple:

  • 01/01/2011 - 3
  • 02/01/2011 - 5
  • 03/01/2011 - 2
  • 04/01/2011 - 1

J'ai essayé et testé un certain nombre de linq déclarations, mais aucune de ces sont de me donner le résultat souhaité. Le plus proche que j'ai est de me donner les dates distinctes, mais avec un nombre de tous les utilisateurs.

Toute aide serait grandement appréciée.

147voto

oryol Points 2238
logins
  .GroupBy(l => l.Date)
  .Select(g => new
  {
    Date = g.Key,
    Count = g.Select(l => l.Login).Distinct().Count()
  });

14voto

naveen Points 140
 var Quert = list.GroupBy((item => item.DateTime),
             (key, elements) => new { key = key, count = elements.Distinct().Count()});

5voto

theburningmonk Points 5590

Quelque chose comme ça peut-être?

 var list = new List<MyClass>(new[] {
        new MyClass { Date = DateTime.Parse("01/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("01/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("01/01/2011"), Username = "alex" },
        new MyClass { Date = DateTime.Parse("01/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "matt" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "jamie" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "alex" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "lucy" },
        new MyClass { Date = DateTime.Parse("02/01/2011"), Username = "alex" },
        new MyClass { Date = DateTime.Parse("03/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("03/01/2011"), Username = "bob" },
        new MyClass { Date = DateTime.Parse("03/01/2011"), Username = "bob" },
        new MyClass { Date = DateTime.Parse("03/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("03/01/2011"), Username = "james" },
        new MyClass { Date = DateTime.Parse("04/01/2011"), Username = "alex" },
        new MyClass { Date = DateTime.Parse("04/01/2011"), Username = "alex" },
        new MyClass { Date = DateTime.Parse("04/01/2011"), Username = "alex" }
    });

list.GroupBy(l => l.Date, l => l.Username)
    .Select(g => new { 
                Date = g.Key, 
                Count = g.Distinct().Count() 
            });
 

1voto

RameshVel Points 24472

Une autre façon de résoudre ce problème est de grouper deux fois, vérifiez l'échantillon

           var dist = listLogins.GroupBy(d => d.date + d.Username)
              .Select(x => x.First())
              .GroupBy(d => d.date).Select(y => new { date = y.Key, count = y.Count() }).ToList();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X