具有三个表的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是他最后登录配置文件的日期。
但我确信这是行不通的。我希望详细信息表中填写详细信息。帮帮我。
这里有一个查询,应该为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
调用,因为让数据库尽可能多地完成工作总是很好的。这是我的想法,没有经过测试,所以仍然可能有一些错误,但这应该是一个很好的起点。