繁体   English   中英

将以下SQL计数等效于LINQ计数

[英]Equivalent of the following SQL Count to LINQ Count

我的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等效产品帮助我吗?

提前致谢

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

var result = History.Where(H=>H.DateUsed.Year == 2013)
                    .GroupBy(g => g.Method)
                    .Select(g => new {Method = g.Key, Count = g.Count()});

如果您对实体不满意 ,则需要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()
                    });

其他答案是正确的,这只是利用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扩展方法在其他情况下更易于使用。 熟悉两者都有助于。

注意:未测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM