我有這將有電子郵件,然後收件人表將有電子郵件Linq查詢基於prioirty電子郵件
的收件人EmailMessage
標識
內容
電子郵件消息表Priority
MessageRecipient
EmailMessageFk
RecipientEmailId
LastError
LastTriedAt
NextTryAt
每個消息可具有1至10個優先其中1是最低和10是最高的。我在C#中創建了一個函數,它將在一定的時間間隔後嘗試重新發送所有未決的電子郵件消息。
我想編寫能在數據庫上運行,並且將根據以下標準
返回最符合條件的記錄單LINQ查詢a)如果任何郵件收件人已經過去一直是試圖在此之前發送12小時它應該是電子郵件
b)如果根據(a)標準沒有找到收件人,那麼它應該返回具有最高優先級的電子郵件消息,並且如果有多個具有最高優先級的電子郵件消息,則它應該返回具有最高優先級和最低LastTriedAt日期時間的消息。
請記住,我只想要一個LINQ查詢,以滿足所有這些要求
我用下面的查詢
entities.EmailMessageRecipients.Where(
p => p.NextAttemptAt <= DateTime.UtcNow)
.Select(p => p.Message)
.Distinct()
.OrderByDescending(p => p.Priority)
.ThenBy(p => p.Id)
.FirstOrDefault();
但這個查詢有一個缺陷。如果很多高優先級的消息被卡在表中,那麼它將不會嘗試先前的低優先級消息。
您不僅需要對NextAttemptAt進行過濾(Where),還要對NextAttemptAt進行排序(OrderBy)。 –
但我不能過濾nextattemptat,因爲我需要一個帶有nextattemptat> 12小時的消息,如果沒有這樣的消息存在,那麼會得到一個最高優先級的待處理消息 – yrahman
「請記住,我只想要一個linq查詢來滿足所有這些要求。你想要什麼和適合什麼不一定是同一件事。 – jmcilhinney