Проблемы с преобразованием простого SQL в Linq - PullRequest
1 голос
/ 06 июля 2011

Я довольно застрял при преобразовании этого в 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 = });

Ответы [ 6 ]

1 голос
/ 06 июля 2011

Держу пари, есть лучшие способы сделать это, но вот один.

Если бы в таблице было два поля, определенных так:

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);
}
1 голос
/ 06 июля 2011

отправлено на почту .... но это должно сработать. Обратите внимание, как вы можете группировать по нескольким полям, используя анонимный тип. Свойства группы доступны через свойство 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
};  
1 голос
/ 06 июля 2011
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 голос
/ 06 июля 2011
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)
1 голос
/ 06 июля 2011
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 голосов
/ 06 июля 2011

это больше похоже на это - извините, у меня нет возможности проверить это

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 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...