gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:02:56 24 4
gpt4 key购买 nike

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

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 的实例,将查询保存在该实例中并返回对其运行时方法的引用,该方法将由用户代码调用。
当用户执行该方法时,将编译查询(仅限第一次)并执行该方法。

关于linq-to-sql - IQueryable 什么时候执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2355020/

24 4 0