使用Entity Framework将SQL查询转换为linq

时间:2016-11-21 17:21:43

标签: .net entity-framework linq

任何人都可以提供帮助,我无法将以下查询转换为linq:

SELECT 
    COUNT(DATENAME(Month, bo.u_datadesc)),
    DATENAME(Month, bo.u_datadesc),
    DATEPART(Month, bo.u_datadesc),
    bo.u_rpmotori 
FROM 
    bo 
WHERE
    (bo.u_rpmotori = 'John' OR bo.u_rpmotori = 'Michael') 
    AND bo.boano = '2016' 
GROUP BY
    DATENAME(Month, bo.u_datadesc),
    DATEPART(Month, bo.u_datadesc),
    bo.u_rpmotori 
ORDER BY
    DATEPART(Month, bo.u_datadesc)

这里的主要问题是计数。我想计算一个月按名称和月份分组的结果数。我在SQL Server Mgmt Studio中测试了原始查询,它运行正常。

谢谢

2 个答案:

答案 0 :(得分:0)

这是一次尝试:

继承人尝试:

(from bo in db.bo
 where
  (bo.u_rpmotori == "John" || bo.u_rpmotori == "Michael") &&
   bo.boano == '2016'
  group bo by new
  {
    Count = bo.u_datadesc.Month.ToString().Count(),
    Month = bo.u_datadesc.Month,
    bo.u_rpmotori

  } into g
  orderby g.Key.MonthNumeber
  select new
  {
    Count = g.Key.Count,
    Month = g.Key.Month,
    Motorista = g.Key.u_rpmotori
}).ToList()

答案 1 :(得分:0)

我会将日期名称留给客户端并使用类似的内容。

    (from bo in db.bo
     where
       (bo.u_rpmotori == "John" || bo.u_rpmotori == "Michael") &&
        bo.boano == '2016'
     group bo by new
     { 
         Month = bo.u_datadesc.Month,
         bo.u_rpmotori

      } into g
     orderby g.Key.Month
     select new
     {
         Count = g.Count() ,
         Month = g.Key.Month,
         Motorista = g.Key.u_rpmotori
     }).ToList()

除非您的数据可以包含具有空日期的记录,否则这应该会给您类似的结果。在这种情况下,我认为你的sql将为计数返回零,而linq代码将返回实际的记录数。