我们有一个数据层。 该数据层内部是代表各种表/字段的模型。 这些模型还与其各自的 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 条记录。
但是,随着它像这样执行,它会迭代数据库中的每条记录,然后我们才能跳过/获取。 太臭了。
我在这里缺少什么?
但我看到发生的是,当我们创建 IQueryable 时,它正在执行 SQL
那你就看错了。例如,您可能会看到它在监视窗口中执行,或者在调试期间在 VS 的自动监视窗口中执行。无论您执行该查询,都会得出错误的结论。