我已经从网站示例中获取了以下代码。它工作得很好,但我真的不明白 它是如何工作的......
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));
我很欣赏代码有点具体,但我认为发生的情况如下:
我现在可以通过做这样的事情来消费这个(对不起,我没有完全代码可以提供)......
IList = someDataContext.MatchedIPAddressesAuditRecords(“username”,“ipaddress”,24).ToList();
我不明白IQueryable是如何在这里工作的? - 我是否将查询的接口返回给我的调用方法? - 我的编译查询存储在何处以及何时执行? - 返回接口IQueryable的相关性是什么?
对于这实际上是如何运作的一些解释会非常有用。
感谢。
答案 0 :(得分:0)
CompiledQuery.Compile在静态构造函数中调用一次。
此方法创建CompiledQuery的实例,在此实例中保存查询,并返回将由用户代码调用的运行时方法的引用。
当用户执行该方法时,将编译查询(仅限第一次)并执行该方法。