具有三个表的Linq查询在x天后加入以发送警报

本文关键字:天后 查询 三个 Linq | 更新日期: 2023-09-27 18:21:28

我想实现电子邮件功能,用户可以向自20天以来没有登录的配置文件发送电子邮件,我还希望每10天重复一次。

    I have three tables 
    1) "details" table where profile is maintained.
    2) "notify" table where i keep a track of notification send to profiles.
    3) "profile" table where i keep track of the login information of profile.

到目前为止,我已经尝试过这个-

    list = (from c in ctx.details.AsEnumerable()
                       join u in ctx.profile.AsEnumerable()
                       join a in ctx.notify..AsEnumerable()
                       on c.profileid equals u.profileid equals a.profileid
                       where (u.last_login_date == null && 
                      (DateTime.Now - u.last_login_date).TotalDays >= 20)
                       select new details
                       {
                           profileid = c.profileid.ToString(),
                           firstname = c.firstname,
                           lastname = c.lastname,
                           email = c.email
                       }).ToList(); 
  • My tables are ->
      details             notify                profile
      -----------        ------------          -------------- 
      profileid          profileid              profileid
      firstname          alert_date(datetime)   last_login_date(datetime)
      lastname
      email 
    

其中alert_date是较早发送电子邮件的日期,last_login_date是他最后登录配置文件的日期。

但我确信这是行不通的。我希望详细信息表中填写详细信息。帮帮我。

具有三个表的Linq查询在x天后加入以发送警报

这里有一个查询,应该为20天内没有登录的每个配置文件或此后每10天(例如30天、40天)返回一次详细信息对象。

list = (from c in ctx.detail
       join u in ctx.profile
       on c.profileid equals u.profileid
       join a in ctx.notify
       on c.profileid equals a.profileid
       let datediff = DateTime.Now.Subtract(u.last_login_date).TotalDays
       where datediff >= 20 && datediff % 10 == 0
       select c).ToList(); 

我已经删除了AsEnumerable调用,因为让数据库尽可能多地完成工作总是很好的。这是我的想法,没有经过测试,所以仍然可能有一些错误,但这应该是一个很好的起点。