2011-07-26 8 views
6

Quiero obtener un recuento de cada mes, pero el recuento debe ser como máximo de uno por día, incluso si hay varias ocurrencias. Tengo la consulta SQL que funciona bien, pero que tiene problemas para convertirlo en LINQ -¿Escribe una consulta LINQ comparable para el recuento distinto agregado en sql?

select 
    count(DISTINCT DAY(date)) as Monthly_Count, 
    MONTH(date) as Month, 
    YEAR(date) 
from 
    activity 
where 
    [email protected] 
group by 
    YEAR(date), 
    MONTH(date) 

Podría alguien ayudarme a traducir la consulta anterior a LINQ. ¡Gracias!

+0

¿Esto está en C# o VB.Net? –

+0

@Rob Allen, la etiqueta dice C# – Gage

+0

Sí, agregué la etiqueta más tarde ... ¡después de señalar a @Rob! – Vishal

Respuesta

7

por LINQ to SQL using GROUP BY and COUNT(DISTINCT) dada por @Rick, esto debería funcionar:

var query = from act in db.Activity 
      where act.Id == id 
      group act by new { act.Date.Year, act.Date.Month } into g 
      select new 
      { 
       MonthlyCount = g.Select(act => act.Date.Day).Distinct().Count(), 
       Month = g.Key.Month, 
       Year = g.Key.Year 
      }; 

No sé si L2S puede convertir el interior g.Select(act => act.Date.Day).Distinct.Count() correctamente.

0
var results = db.activities.Where(a => a.id == myID) 
          .GroupBy(a => new 
             { 
              Month = a.date.Month, 
              Year = a.date.Year 
             }) 
          .Select(g => new 
             { 
              Month = g.Key.Month, 
              Year = g.Key.Year, 
              Monthly_Count = g.Select(d => d.date.Day) 
                  .Distinct() 
                  .Count() 
             }) 
Cuestiones relacionadas