簡體   English   中英

Linq查詢不返回任何東西

[英]Linq query not returning anything

因此,我有一個像這樣的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;
}

為什么是空的?

謝謝

您正在過濾h以僅包含元素h.Action == 104而h2僅包含i.Action == 200 || i.Action == 201 || i.Action == 202 i.Action == 200 || i.Action == 201 || i.Action == 202 i.Action == 200 || i.Action == 201 || i.Action == 202 ,這是完全不同的結果集,沒有h的任何元素。

如果ImageId是您的主鍵(或任何其他唯一字段),則連接2套不同的結果集將始終導致空集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM