read c# linq

read - set ienumerable c#



Linq distinct-Count (5)

Algo como esto tal vez?

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() });

Estoy buscando realizar una consulta sobre una lista de ejemplos de objetos

Date Username 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

Quiero utilizar linq para consultar la lista de fechas con el número de inicios de sesión de usuario únicos.

Por ejemplo:

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

He intentado, como he probado, varias sentencias de linq, pero ninguna de ellas me da el resultado deseado. Lo más cercano que tengo es dándome las fechas distintas pero con un recuento de todos los usuarios.

Cualquier ayuda sería muy apreciada.


Me doy cuenta de que esta es una pregunta antigua, pero la encontré y vi el comentario sobre querer la sintaxis del método y no pude evitar contestar ... Es posible que tenga un desorden de codificación.

En la sintaxis de la consulta se ve así ... tenga en cuenta que no existe una sintaxis de consulta para Distinct y Count

from l in logins group l by l.Date into g select new { Date = g.Key, Count = (from l in g select l.Login).Distinct().Count() };

Para una comparación lado a lado con la sintaxis del método original (que personalmente me gusta más) aquí tienes ...

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


Otra forma de resolver esto es agrupar dos veces, verificar la muestra

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();


Se puede hacer dentro de una sola llamada de GroupBy,

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


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