2011-07-26 15 views
6

Chcę uzyskać liczbę dla każdego miesiąca, ale liczba powinna wynosić najwyżej jedną na dzień, nawet jeśli występuje wiele zdarzeń. Mam kwerendy SQL, który działa prawo, ale mający kłopoty aby przekształcić go w LINQ -Napisz porównywalną kwerendę LINQ dla łącznej liczby odrębnej w 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) 

Czy ktoś może mi pomóc w tłumaczeniu powyższej zapytanie do LINQ. Dzięki!

+0

Czy to w C# czy VB.Net? –

+0

@Rob Allen, tag mówi C# – Gage

+0

Tak, dodałem tag później .. po wskazaniu @Rob! – Vishal

Odpowiedz

7

Per LINQ to SQL using GROUP BY and COUNT(DISTINCT) podanej przez @Rick, to powinno działać:

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

ja nie wiem, czy L2S można przekształcić wewnętrzny g.Select(act => act.Date.Day).Distinct.Count() prawidłowo.

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() 
             }) 
Powiązane problemy