C# .NET Core 6.0 - 创建 IQueryable 时使用 Select 正在执行 SQL,如何获得延迟执行?

问题描述 投票:0回答:1

我们有一个数据层。 该数据层内部是代表各种表/字段的模型。 这些模型还与其各自的 DbContext 相关联(我们将其称为 OurDbContext)。

public class Foo
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}

在一个特定的项目中,我想向 Foo 添加一个表中没有的字段。

public class Bar : Foo
{
    public string Field3 { get; set; }
}

我想创建一个 IQueryable 来延迟执行。

IQueryable<Bar> queryable = OurDbContext.Foo.FromSqlRaw(someSQl)
    .AsNoTracking()
    .Select(x => new Bar()
    {
        Field1 = x.Field1
        Field2 = x.Field2
        Field3 = null // null for now, we'll fill it in later
    });

当您查看 Intellisense 时,它会显示 .Select 返回一个 IQueryable。

但我看到发生的是,当我们创建 IQueryable 时,它正在执行 SQL。 我们想要使用延迟执行的 IQueryable,这样我们就可以通过 GUI 一次跳过/获取 100 条记录。

但是,随着它像这样执行,它会迭代数据库中的每条记录,然后我们才能跳过/获取。 太臭了。

我在这里缺少什么?

c# .net-core .net-6.0 iqueryable
1个回答
0
投票

但我看到发生的是,当我们创建 IQueryable 时,它正在执行 SQL

那你就看错了。例如,您可能会看到它在监视窗口中执行,或者在调试期间在 VS 的自动监视窗口中执行。无论您执行该查询,都会得出错误的结论。

© www.soinside.com 2019 - 2024. All rights reserved.