2011-07-26 76 views
6

Tôi muốn tính số tiền cho mỗi tháng nhưng số đếm chỉ được tính tối đa một lần mỗi ngày ngay cả khi có nhiều lần xuất hiện. Tôi có truy vấn SQL hoạt động đúng nhưng gặp sự cố khi chuyển đổi nó thành LINQ -Viết truy vấn LINQ có thể so sánh cho tổng số khác biệt trong 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) 

Có thể giúp tôi dịch truy vấn trên sang LINQ. Cảm ơn!

+0

Đây có phải là trong C# hoặc VB.Net không? –

+0

@Rob Allen, thẻ nói C# – Gage

+0

Yea Tôi đã thêm thẻ sau .. sau khi @Rob chỉ ra! – Vishal

Trả lời

7

mỗi LINQ to SQL using GROUP BY and COUNT(DISTINCT) do @Rick, điều này sẽ làm việc:

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

Tôi không biết nếu L2S có thể chuyển đổi các nội g.Select(act => act.Date.Day).Distinct.Count() đúng cách.

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() 
             }) 
Các vấn đề liên quan