Linq加入了第二桌的最新记录

时间:2018-03-04 19:31:06

标签: c# sql linq

我有两个相关的表TicketStatus

每张票都可以是多种状态。 (开放,分配,关闭)。但我想要所有门票,但只显示一个状态(最新日期)。

我可以在t-sql上处理这个查询;

SELECT d.ticketID, statusName, c.statusDate, c.assignedTo,c.statusID
FROM Ticket d LEFT JOIN Status c ON c.ticketID = d.ticketID
WHERE  c.statusID = (
    SELECT MAX(statusID)
    FROM Status c2
    WHERE c2.ticketID = d.ticketID)

这是我的Linq:

var result = from t in db.Ticket
             join s in db.Status.OrderByDescending(x=>x.statusDate).Take(1) 
             on t.ticketID equals s.ticketID join c in db.Customer 
             on t.customerID equals c.customerID

但这只返回一行。

2 个答案:

答案 0 :(得分:0)

我通过将我的Tsql查询转换为linq

来解决linqer应用程序的问题
from s in db.Status
                     where s.statusID ==
                         (from c2 in db.Status where
                               c2.ticketID == s.Ticket.ticketID &&
                               c2.statusName == "New" ||
                               c2.statusName == "Assigned"
                          select new
                          {
                              c2.statusID
                          }).Max(p => p.statusID)

谢谢大家。

答案 1 :(得分:0)

尝试将原始linq逻辑更改为:

var result = from t in db.Ticket
join s in db.Status on t.ticketID equals s.ticketID into sGroup
from s in sGroup.OrderByDescending(x=>x.statusDate).Take(1)
join c in db.Customer 
on t.customerID equals c.customerID