所以,我有一个SQL
查询是这样工作的,Linq查询不返回任何东西
SELECT *
FROM db.history a
inner join db.history b
on a.image_id = image_id
and b.action in(200,201,202)
where a.user_id = 'someuser'
and a.action in (104)
and a.time_stamp between '2015-06-22 00:00:00' and '2015-06-22 23:59:59'
现在,我试图执行相同的查询中Linq
在不同的部分是这样的:
1)首先,我得到一切从history
表,其中action = 103 and 104
那就是日期范围之间:
var history = Db.Histories
.Select(i => i)
.Where(i
=>
&& i.TimeStamp >= startDate && i.TimeStamp <= endDate
&& (i.ActionId == 103 || i.ActionId == 104))
.OrderBy(i => i.UserId)
.ToArray();
2)我得到所有用户:
var users = history.Select(i => i.UserId).Distinct().ToList();
这两个查询工作的罚款。然而,当我尝试遍历所有用户实行SQL
查询不返回任何东西:
for(var user in users)
{
var query = from h in history
join h2 in Db.Histories.Where(i => i.Action == 200 || i.Action == 201 || i.Action == 202)
on h.ImageId equals h2.ImageId
where h.UserId.Equals(user) && h.Action == 104
select h;
}
为什么是空的?
谢谢
为什么内用b首先加入?在我看来,你可以把(200,201,202)中的a.action放在where子句中,而不是(200,201,202) – JoaoFSA
@JoaoFSA中的b.action。谢谢你的问题。你看,我需要找到这些记录,其中的行动是在200,201或202之后发生的。 104在这段时间内发生。 –