繁体   English   中英

如何使用Orderby,Groupby将SQL查询转换为LINQ

[英]How to convert SQL query to LINQ with Orderby, Groupby

我写的是在linq中编写这个SQL查询,但没有工作..

select [ProcessTime], Count([ID]) as 'amount of processes'
from [DB].[dbo].[TableX]
where [ID] in ('ServerX', 'ServerY') and [Type] ='Complete'
group by [ProcessTime]
order by [ProcessTime]

我想实现这个linq和我尝试过的,我将查询分成两个,一个用于处理时间group by子句,另一个用于计算ID

var query1 =  (from a in this.db.Processes
               where (a.ID =='ServerX' || a.ID =='ServerY') && a.Type =='Complete'
               group a by a.ProcessTime into b
              //here I dont know where to place orderby
               select b);


 var query2 = (from a in this.db.Processes
               where (a.ID =='ServerX' || a.ID =='ServerY') && a.Type =='Complete'
               orderby a.ProcessTime 
               select a).Count();

这是将查询拆分为两个然后再合并它们的正确方法吗?

尝试这个:

var serverNames = new string[]{"ServerX", "ServerY"};
var result = db.Processes
    .Where(p => serverNames.Contains(p.ID) && p.Type == "Complete")
    .GroupBy(p => p.ProcessTime)
    .Select(g => new
    {
        ProcessTime = g.Key,
        AmountOfProcesses = g.Count()
    })
    .OrderBy(x => x.ProcessTime);

您可以在一个查询中完成所有这些操作:

var query1 = (from a in this.db.Processes
              where (a.ID == "ServerX" || a.ID == "ServerY") && a.Type == "Complete"
              group a by a.ProcessTime into b
              orderby b.Key
              select new {ProcessTime = b.Key, Count = b.Count()});

暂无
暂无

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

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