2017-02-13 39 views
0

Я пытаюсь преобразовать некоторый SQL код в C# Linq:Преобразование SQL в Linq в C#

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 

который отображает

Paul 6 
Mike 4 
Donna 3 
Elliot 2 

Я пытался использовать Linqer, который сделал это более сложное и Didnt возвращения любые результаты:

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) 
       }; 

Ваша помощь будет принята с благодарностью.

Благодаря

+0

Вы уверены, что 'data' не пуст? Вы используете ORM? –

ответ

1

Предполагая, что CompletedBy и UserId столбцов являются как 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() 
     }; 
+0

Почему бы не просто «group t by m.UserName»? Также это должно быть просто 'tGroup.Count()'. – juharr

+0

обновил код .. спасибо. был старый rev ответа все еще реализовано –

+0

это идеальное спасибо. Я почесываю голову около 4 часов, вы решили это через 4 минуты! Еще раз спасибо. – Belliez