我有两个相关的表Ticket
和Status
。
每张票都可以是多种状态。 (开放,分配,关闭)。但我想要所有门票,但只显示一个状态(最新日期)。
我可以在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
但这只返回一行。
答案 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