简体   繁体   English

在C#中将SQL转换为Linq

[英]Converting SQL to Linq in c#

I am trying to convert some SQL Code to c# Linq: 我试图将一些SQL代码转换为c#Linq:

SELECT Username, Count(Ticket.TicketId) as 'Tickets Completed'
FROM  Ticket
INNER JOIN TicketStatus ON Ticket.TicketStatusID = TicketStatus.TicketStatusID
INNER JOIN Membership ON Ticket.CompletedBy = Membership.UserId
WHERE Ticket.ClosedDate >= @StartDate
      and Ticket.ClosedDate <= @EndDate
GROUP BY Username
ORDER BY 'Tickets Completed' DESC

which displays 显示

Paul    6
Mike    4
Donna   3
Elliot  2

I tried to use Linqer which made this more complicated and didnt return any results: 我尝试使用Linqer,这使事情变得更加复杂,并且没有返回任何结果:

var query = from Ticket in data.Tickets
                join Membership in data.Memberships on new { CompletedBy = Guid.Parse(Ticket.CompletedBy.ToString()) } equals new { CompletedBy = Membership.UserId }
                where
                  Ticket.ClosedDate >= StartDate &&
                  Ticket.ClosedDate <= EndDate
                group new { Membership, Ticket } by new
                {
                    Membership.Username
                } into g
                orderby
                  "Tickets Completed" descending
                select new
                {
                    Username = g.Key.Username,
                    Completed = g.Count(p => p.Ticket.TicketID > 0)
                };

Your help would be appreciated. 您的帮助将不胜感激。

Thanks 谢谢

Assuming CompletedBy and UserId columns are both uniqueidentifier in the database, you shouldn't need to do any type conversion. 假设CompletedByUserId列在数据库中都是uniqueidentifier ,则不需要进行任何类型转换。

var query = from t in db.ticket
        join ts in db.ticketStatus 
        on t.TicketStatus.ID equals ts.TicketStatusID
        join m in db.Membership 
        on t.CompletedBy equals m.UserId
        where t.ClosedDate >= startDate 
             && t.closedDate <= endDate
        group  t by m.UserName into tGroup
        order by tGroup.Count(t=> t.TicketId) decending
        select new {
          UserName = tGroup.Key,
          TicketCount = tGroup.Count()
        };

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

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