簡體   English   中英

LINQ中SQL的Max函數等效項是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM