带有三个表的Linq Query连接在x天后发送警报

时间:2012-01-25 12:34:17

标签: c# linq entities

我想实现电子邮件功能,用户可以将电子邮件发送到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的日期 他最后登录个人资料的日期。

但我相信这不会起作用。我希望细节表充满细节。 帮助我。

1 个答案:

答案 0 :(得分:1)

这是一个应该为每个没有登录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次调用,因为让数据库完成尽可能多的工作总是好的。它不是我的头脑,未经测试,所以仍然可能有一些错误,但这应该是一个很好的起点。