Linq查询没有返回任何内容

时间:2015-09-04 13:33:52

标签: c# linq

所以,我有一个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;
}

为什么是空的?

谢谢

1 个答案:

答案 0 :(得分:0)

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

如果ImageId是您的主键(或任何其他唯一字段),则加入2组不同的结果将始终导致空集