我試圖找到一種方法來檢測我的SignalR聊天應用程序中的垃圾郵件。每次用戶發送消息時,我都想檢查該用戶最近5秒發送的消息數量。我有一個包含兩個表的數據庫:消息和用戶,其中消息通過MessageDate和具有UserID的用戶進行記錄。表格之間存在多對一關係(每個消息1個用戶,每個用戶多個消息)。在幾個表上的日期範圍內的Linq查詢?
如何編寫查詢以檢查特定用戶在過去5秒內發送的消息?
我試過在網上尋找解決方案,但我是新來的查詢,很難讓一切正確(加入,日期範圍,使用計數屬性和獲取數據模型的權利)。
我已經得到的最接近的是一樣的東西:
var db = new MessageContext();
int messageCount = (from op in db.Message
join pg in db.User on op.UserID equals pg.UserID
where pg.UserID == op.UserID
&& (a.Start.Date >= DateTime.Now.AddSeconds(-5)
&& a.Start.Date <= DateTime.Now)
select op)
.Count();
在此先感謝,任何幫助appriciated!
什麼問題? –
這感覺就像一個糟糕的解決方案:爲什麼每次都要搜索整個數據庫?也許你可以有第二張桌子,只要保持時間和身份證,並經常去掉舊的價值觀。這將計算複雜度降低到接近恆定時間,並簡化了您的邏輯。 –
我建議使用Linq來反應性擴展。你應該爲進入的消息創建一個Observable。真的。不要使用像這樣的數據庫。赫克不要在所有的地方使用數據庫。 Entity Framework並不是唯一存在的Linq Provider,而Reactive Extension被許多人稱爲Linq未來事件。 – Aron