[英]What is the Max function equivalent of SQL in LINQ?
我有此SQL查询,我需要将其转换为LINQ:
SELECT *
FROM USER U
INNER JOIN (
SELECT USERID , MAX(SALESDATE) AS MAXDATE
FROM SALES
GROUP BY USERID) S ON U.ID = S.USERID
到目前为止,这是我提出的LINQ:
var Users = (from d in db.Users
join s in db.Sales on d.Id equals s.UserId
select new Models.User
{
Id = d.Id,
UserName = d.UserName,
FirstName = d.FirstName,
LastName = d.LastName,
EmailAddress = d.EmailAddress,
PhoneNumber = d.PhoneNumber,
LastPurchase = s.SalesDate
}).Max(x => x.SalesDate);
但是,我很确定结果是不一样的。 谁能建议将其转换为LINQ的正确方法? 我还是学习LINQ的新手。 我非常感谢您的帮助。
尝试这个
var Users = (from d in db.Users
from s in db.Sales.where(x=>x.Userid==d.id).groupby(x=>x.Userid)
select new Models.User
{
Id = d.Id,
UserName = d.UserName,
FirstName = d.FirstName,
LastName = d.LastName,
EmailAddress = d.EmailAddress,
PhoneNumber = d.PhoneNumber,
LastPurchase = s.Max(x=>x.SalesDate)
}).ToList();
您当前的Linq查询首先在整个表上联接,然后选择与SQL相反的查询,该SQL首先在Sales表中选择然后在该结果上联接(在示例中为别名S
)。
var query = from u in db.Users
join s in (from sale in db.Sales
group sale by sale.Id into grp
select new {
Id = grp.Key,
LastPurchase = grp.Max(item => item.SalesDate)
})
on u.Id equals s.Id
select /* what you need to retrieve */;
您可以这样做:
var query1 = from sale in db.Sales
group sale by sale.UserId into g
let maxDate = g.Max(s => s.SalesDate)
select new { UserId = g.Key, maxDate };
var query2 = from user in db.Users
from q1 in query1.Where(q => q.UserId == user.Id)
select new { user.Id, user.UserName, user.Firstname, user.lastname, ... , q1.maxDate };
var result = query2.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.