1

我对 LINQ 有一些问题,我的问题类似于下面的示例,我有一个名为 History 的表,其中包含以下数据

Method DateUsed

A      2013/02/01
A      2013/01/01
B      2013/01/01
B      2012/01/01 <--
C      2013/01/01
C      2012/02/01

我想要的是获得在特定年份使用的方法的数量或计数,如果我想获得年份 = 2013,结果将是:

Method Total 

A       2
B       1 <--
C       3

在 SQL 中,我的查询类似于

Select Method, Count(DateUsed) as Total from history 
where YEAR(DateUsed) = '2013' group by Method 

但是,我不知道如何在 LINQ 中做到这一点,有人可以帮助我使用 LINQ 等价物吗?

提前致谢

4

3 回答 3

1

您将使用类似于 SQL for LINQ 的查询。按方法分组,然后选择方法和计数。

var result = History.Where(H=>H.DateUsed.Year == 2013)
                    .GroupBy(g => g.Method)
                    .Select(g => new {Method = g.Key, Count = g.Count()});
于 2013-05-22T14:35:06.513 回答
1

如果您在 linq to entity 中,则需要SqlFunctions

var result = context.History
                    //linq to entities
                    .Where(m => SqlFunctions.DatePart("year", DateUsed) == 2013)
                    //linq to object
                    .Where(m => m.DateUsed.Year == 2013)
                    //common part
                    .GroupBy(m => m.Method)
                    .Select(g => new {
                        Method = g.Key,
                        Total = g.Count()
                    });
于 2013-05-22T14:39:24.577 回答
1

其他答案是正确的,这个只是使用 LINQ 查询语法:

var result = 
    from m in context.History
    where m.DateUsed.Year == 2013
    /* or where SqlFunctions.DatePart( "YEAR", m.DateUsed ) == 2013 */
    group m by m.Year into g
    select new { Method = g.Key, Total = g.Count() };

我发现查询语法在某些情况下更易于使用,而 LINQ 扩展方法在其他情况下更易于使用。熟悉两者都会有所帮助。

注:未测试

于 2013-05-22T14:45:11.867 回答