linq-to-sql - IQueryable 什么时候执行查询?

我从网站示例中获得了以下代码。它工作得很好,但我不太明白如何它是如何工作的......

public static Func<EuvaTransientDataContext, string, string, int, IQueryable<SecurityAudit>>
    MatchedIPAddressesAuditRecords =
        CompiledQuery.Compile((EuvaTransientDataContext db, string username, string ipAddress, int withinHours) =>
            (from sa in db.SecurityAudits
             where sa.IPAddress == ipAddress &&
                   sa.Username != username &&
                   sa.AuditDateTime >= DateTime.Now.AddHours(withinHours * -1)
             select sa));

我很欣赏代码有点具体,但我认为发生的情况如下:

  • 我正在创建一个接受多个参数并返回一个输入到 SecurityAudit 的 IQuerable 的委托(delegate)。
  • 我正在创建编译查询等。

我现在可以通过做这样的事情来使用它(抱歉,我手头没有确切的代码)...

IList = someDataContext.MatchedIPAddressesAuditRecords("用户名", "ipaddress", 24).ToList();

我不明白 IQueryable 在这里是如何工作的? - 我是否将查询接口(interface)返回到我的调用方法? - 我的编译查询存储在哪里以及何时执行? - 返回接口(interface) IQueryable 的相关性是什么?

如果能解释一下这实际上是如何工作的,那就太好了。

谢谢。

最佳答案

CompiledQuery.Compile 在静态构造函数中被调用一次。
此方法创建 CompiledQuery 的实例,将查询保存在该实例中并返回对其运行时方法的引用,该方法将由用户代码调用。
当用户执行该方法时,将编译查询(仅限第一次)并执行该方法。

https://stackoverflow.com/questions/2355020/

相关文章:

uml - UML 图和 SDLC 之间的映射?

xml - 如何使用 Firefox 验证 XML?

file - 如何为 MP4 文件创建缩略图系统

macos - 将屏幕的一部分镜像到外部显示器(在 OSX 中)

wpf - 从代码添加 Viewport2DVisual3D 时出现问题

.net - SQL Server 和 .NET 类型化数据集 AllowDBNull 元数据

c# - WPF:如何从项目控件中查找数据模板中的元素

visual-studio - 如何在命令行参数中将解决方案文件夹作为参数传递(用于调试)?

design-patterns - 编程范式实用指南?

php - 如何检索验证码并使用 PHP cURL 保存 session ?