在 include 子句中不应用 LINQ 查询

The LINQ query is not applied when inside a include clause

提问人:guirms 提问时间:11/8/2023 最后编辑:guirms 更新时间:11/8/2023 访问量:40

问:

我正在使用 .NET Core 7 和 Entity Framework 7.0.13,我有以下 LINQ 查询:

var test = _typedContext
    .AsNoTracking()
    .AsNoTracking()
    .Include(m => m.MachineOperations!
        .Where(m =>
            m.InsertedAt.Date <= endDate.Date &&
            m.EndTime <= endDate.TimeOfDay &&
            m.InsertedAt.Date >= startDate.Date &&
            m.StartTime >= startDate.TimeOfDay))
    .ThenInclude(m => m.EggQuantities);

var sameCondition = test.First().MachineOperations
            .Where(m =>
                m.InsertedAt.Date <= endDate.Date &&    
                m.EndTime <= endDate.TimeOfDay &&
                m.InsertedAt.Date >= startDate.Date &&
                m.StartTime >= startDate.TimeOfDay);

Console.WriteLine(sameCondition); // Here it returns empty

我的问题是.未应用包含中的 Where 子句。例如,我传入了 startDate 变量的内容“2023-11-08 10:00:00”,查询从 9 月和 10 月开始引入 MachineOperations,忽略了我的条件。最奇怪的是,在查询之后,我再次过滤,应用完全相同的条件,并且条件正常工作。当它位于包含内时,该条件根本不起作用。为什么会这样?我该如何解决它?

编辑:我只是意识到,如果我添加一个.ToList(),一切正常。现在我的问题是:这会损害我的查询的性能吗?

.NET LINQ .net-core 实体框架核心 iqueryable

评论

0赞 Poul Bak 11/8/2023
如果您要查询之前的时间,则您的条件将失败。时间条件应仅在该日期应用。10:00
0赞 guirms 11/8/2023
如果在哪里工作,这应该会发生
0赞 Svyatoslav Danyliv 11/8/2023
您是否尝试过分析已执行的 SQL?
0赞 guirms 11/8/2023
是的,sql 查询是 rigth。我只是意识到,如果我添加一个.ToList(),一切正常。现在我的问题是:这会损害我的查询的性能吗?
0赞 Svyatoslav Danyliv 11/8/2023
如果您有日期索引,是的,您将遇到性能问题。 - 提取日期禁用索引。m.InsertedAt.Date

答: 暂无答案