Linq查询没有返回任何东西

本文关键字:任何东 返回 查询 Linq | 更新日期: 2023-09-27 18:11:08

那么,我有一个SQL查询是这样工作的,

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;
}

为什么是空的?

谢谢

Linq查询没有返回任何东西

您正在过滤h只具有元素h.Action == 104和h2只具有i.Action == 200 || i.Action == 201 || i.Action == 202,这是一个完全不同的结果集,没有h的任何元素。

如果ImageId是你的主键(或任何其他唯一字段),连接两个不同的结果集将总是导致空集