[英]LINQ Join to get latest record from 2nd table
問題:
它們是兩個表TableEmails和TableSentEmailRecords。 因此,無論何時發送電子郵件,TableSentEmailRecords中都會存儲一條記錄,例如發送時間等。
我想做一個LINQ查詢,它使我得到TableEmails的列,再加上來自TableSentEmailRecords的“ SentDate”列,該列顯示發送電子郵件的最新日期。
我嘗試了這個:
List<CustomEmail> emails = new List<CustomEmail>();
var query = from c in db.TableEmails
join o in db.TableSentEmailRecords on c.EmailId equals o.EmailId
select new CustomEmail
{
EmailName = c.EmailName,
EmailId= c.EmailId,
EmailDescription = c.EmailDescription,
LastDateEmailSentOut = o.SentDate
};
emails = query.ToList();
但這不一定從TableSentEmailRecords表中獲取該特定電子郵件的最新記錄。
有任何想法嗎 ???
您可以只使用嵌套查詢而不是聯接:
var query = from c in db.TableEmails
select new CustomEmail
{
EmailName = c.EmailName,
EmailId= c.EmailId,
EmailDescription= c.EmailDescription,
LastDateEmailSentOut = db.TableSentEmailRecordson
.Where(x => x.EmailId = c.EmailId)
.Max(x => x.SentDate)
};
我認為在這種情況下,GroupJoin是正確的方法。 使用子查詢可以工作,但效率不高。 抱歉,我不知道更簡單的查詢語法,尤其是我不知道如何使用它進行組聯接。 也許有人可以翻譯。
db.TableEmails.GroupJoin(db.TableSendEmailRecordson,
o => o.EmailID,
i => i.EmailID,
(o, i) => new
{
EmailName = c.EmailName,
EmailId= c.EmailId,
EmailDescription= c.EmailDescription,
LastDateEmailSentOut = i.Max(x => x.SentDate)
})
要從TableSendEmailRecordson獲取所有詳細信息,您可以執行以下操作:
db.TableEmails.GroupJoin(db.TableSendEmailRecordson,
o => o.EmailID,
i => i.EmailID,
(o, i) => new
{
EmailName = c.EmailName,
EmailId= c.EmailId,
EmailDescription = c.EmailDescription,
LastSendEmailRecordson = i.FirstOrDefault(y => y.SentDate == i.Max(x => x.SentDate))
})
可能會抱怨被翻譯成SQL,如果是這種情況,那么您需要首先獲取數據,然后在查詢中使用結果,例如
var emails = db.TableEmails.ToArray();
var emailSend = db.TableSendEmailRecordson.ToArray();
您可以嘗試這樣的事情:
var query = (from c in db.TableEmails
join o in db.TableSentEmailRecordson c.EmailId equals o.EmailId
select new CustomEmail
{
EmailName = c.EmailName,
EmailId = c.EmailId,
EmailDescription = c.EmailDescription,
LastDateEmailSentOut = o.SentDate
}).OrderByDescending(c => c.LastDateEmailSentOut).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.