Linq Query с тремя таблицами присоединяется, чтобы отправить уведомление через x дней - PullRequest
0 голосов
/ 25 января 2012

Я хочу реализовать функцию электронной почты, чтобы пользователь мог отправлять электронную почту в профили, которые не входили в систему в течение 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 Ответ

1 голос
/ 25 января 2012

Вот запрос, который должен вернуть вам объект подробностей для каждого профиля, который не имел логина в течение 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, так как всегда хорошо, чтобы база данных выполняла как можно большую часть работы. Это не в моей голове и не проверено, поэтому все еще могут быть некоторые ошибки, но это должно быть хорошей отправной точкой.

...