[英]How to get a list of user dialogs from the database of all messages using Entity Framework Core
我在數據庫中有一個帶有消息的表,即:
| Id | FromId | ToId | Text | Date | Read |
這是 class 的樣子:
public class Message
{
public int Id { get; set; }
public IdentityUser From { get; set; }
public IdentityUser To { get; set; }
public string Text { get; set; }
public DateTime Date { get; set; }
public bool Read { get; set; }
}
我需要使用 Entity Framework Core 形成一個請求以獲取所有用戶對話框的列表。 我已經勾勒出一個示例 SQL 查詢:
SELECT FromId, MAX(Date) as updated_at, sum(Read) as new_messages
FROM (SELECT FromId, Date, Read
FROM Messages
WHERE ToId = 'f3578a36-208c-4504-8f3c-afa564455537'
UNION SELECT ToId, Date, 0
FROM Messages
WHERE FromId = 'f3578a36-208c-4504-8f3c-afa564455537'
ORDER BY Date DESC) as talks
GROUP BY FromId
ORDER BY Date DESC;
其中“f3578a36-208c-4504-8f3c-afa564455537”是我想要獲取其對話列表的用戶的 ID。
但是,我無法使用實體框架執行它(或者不知道如何)。 有沒有辦法只使用EF來做到這一點? 我使用 SQLite。
使用 EF 我會像這樣寫下來,我會分別查詢來自和發往用戶的消息並將它們適當地分組:
var chatsFromUser = dbContext.Messages
.Where(m => m.From.Id == "f3578a36-208c-4504-8f3c-afa564455537")
.GroupBy(m => m.To.Id);
var chatsToUser = dbContext.Messages
.Where(m => m.To.Id == "f3578a36-208c-4504-8f3c-afa564455537")
.GroupBy(m => m.From.Id);
但是,我還建議您在Message
實體 class 中為用戶定義ID
屬性:
public class Message
{
public int Id { get; set; }
public IdentityUser From { get; set; }
// choose appropiate type, GUID maybe?
public string FromId { get; set; }
public IdentityUser To { get; set; }
// choose appropiate type, GUID maybe?
public string ToId { get; set; }
public string Text { get; set; }
public DateTime Date { get; set; }
public bool Read { get; set; }
}
然后查詢會稍微簡化,因為您可以直接從消息 object 訪問 ID:
var chatsFromUser = dbContext.Messages
.Where(m => m.FromId == "f3578a36-208c-4504-8f3c-afa564455537")
.GroupBy(m => m.ToId);
var chatsToUser = dbContext.Messages
.Where(m => m.ToId == "f3578a36-208c-4504-8f3c-afa564455537")
.GroupBy(m => m.FromId);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.