gpt4 book ai didi

c# - Linq 查询不返回任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:21 24 4
gpt4 key购买 nike

所以,我有一个像这样工作的 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 和 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 这是一组完全不同的结果,没有 h 的任何元素。

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

关于c# - Linq 查询不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32399443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com