0

我正在尝试找到一种方法来检测 SignalR 聊天应用程序中的垃圾邮件。每次用户发送消息时,我都想检查该用户在过去 5 秒内发送的消息量。我有一个包含 2 个表的数据库:Message 和 User,其中使用 MessageDate 记录消息,使用 UserID 记录用户。表之间存在多对一关系(每条消息 1 个用户,每个用户多条消息)。

如何编写查询以检查特定用户在过去 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!

4

1 回答 1

1

实际上我根本不明白你为什么需要加入,如果你有一个多对多的关系,你不应该需要加入(你应该有导航属性)所以代码应该是这样的:

var q = db.Users
   .Select(usr=>
   new
   {
       User = usr,
       LastMessages = usr.Messages
        .OrderByDescending(msg=>msg.Date)
        .Take(5)
   })
   .Where(usr=>usr.LastMessages.All(msg=>msg.UpdateDate >= 5 minutes from now)
// Here q contains all the users that have posted 5 messages or more in the last 5 minutes as well as those last messages.
于 2013-10-15T05:23:25.183 回答