2011-07-05 72 views
1

我敢卡在此轉換爲LINQ:麻煩簡單的SQL轉換到LINQ

SELECT 
COUNT(1) AS Registrations, 
YEAR(Join_date) AS Year, 
MONTH(Join_date) AS Month 
FROM tblForumAuthor 
GROUP BY YEAR(Join_date), MONTH(Join_date) 
ORDER BY Year, Month 

這只是一個簡單的報告,但我不知道如何通過的,並計數爲做組選擇新的。我只管理這個可憐的企圖:

var q = (from c in db.tblForumAuthors 
     select new {Year = c.Join_date.Year, 
        Month = c.Join_date.Month, 
        Registrations = }); 
+0

僅供參考,錯字@年= c.Join_date.Month – curtisk

+0

@Curt謝謝修復! –

回答

1
var results = db.tblForumAuthors.GroupBy(r => new {Year = r.Join_date.Year, Month = r.Join_date.Month}) 
       .Select(g => new {Registrations = g.Count(), g.Key.Year, g.Key.Month}) 
       .OrderBy(r => r.Year) 
       .ThenBy(r => r.Month) 
+0

謝謝!儘管''System.Linq.IGrouping '沒有包含「Year」的定義,並且沒有接受類型爲「System.Linq」的第一個參數的擴展方法「Year」,但這似乎使紅色的波浪線條變得紅色。 IGrouping '' –

+0

看到我上面的答案,在第二行g.Year應該是g.Key.Year –

+0

非常感謝!你有一個無效的分號btw雖然,但似乎很好,否則:D –

1
db.tblForumAuthors 
.GroupBy(c => new {c.Join_date.Month, c.Join_date.Year}) 
.OrderBy(g => g.Key.Year).ThenBy(g => g.Key.Month) 
.Select(g => new 
{ 
    Registrations = g.Count(), 
    Year = g.Key.Year 
    Month = g.Key.Month 
}); 
0

它更像是這一點 - 抱歉,沒有測試它

var results = from r in tblForumAuthorm 
group r by r.Join_date into 
select new { Year =r.Join_Date.Year, Month = r.join_date.month }; 
+0

這是錯的!你正在整個日期分組,包括日,時,秒,... –

1
from c in db.tblForumAuthors 
group c by new {month = t.Join_Date.Month, year = t.Join_Date.Year} 
into g select new {month = g.Key.month, year = g.Key.year, count = g.Count()} 
1

最後一刻落敗的能力發佈....但這應該做的伎倆。注意如何使用匿名類型按多個字段進行分組。分組的屬性可通過Key屬性獲得。但不知道這是否會產生Count(1)。 IIRC它將是Count(*)

from c in db.tblForumAuthors 
group c by new { c.Join_date.Year, c.Join_date.Month } into g 
orderby g.Year, g.Month 
select new { 
    Registrations = g.Count(), 
    g.Key.Year, 
    g.Key.Month 
}; 
+0

謝謝!欣賞它,但它不編譯''System.Linq.IGrouping '沒有包含'Year'的定義,也沒有包含接受類型'System.Linq'的第一個參數的擴展方法'Year'。 IGrouping '可以找到' –

+0

正如其他答案中所提到的,您錯過了'Key'屬性。我的查詢應該已經從C#編譯器中編譯完成了。 – Mig

1

我敢打賭,有更好的方法來做到這一點,但這裏有一個。

如果表中有過這樣定義的兩個字段:

tblForumAuthor 
========================== 
Join_Date date 
Name   nvarchar(50) 

你可以讓人們在每個月+年份組合這樣的加盟數量的報告:

var db = new DataClasses1DataContext(); 

var report = 
    from a in db.tblForumAuthors 
    group a by new {Year = a.Join_Date.Year, Month = a.Join_Date.Month} 
    into g 
    select new 
       { 
        Year = g.Key.Year, 
        Month = g.Key.Month, 
        Registrations = g.Count() 
       }; 

foreach(var item in report) 
{ 
    Console.WriteLine(item.Year + " " + item.Month + " " + item.Registrations); 
}