2
我得到了下面的代码,我从网站的例子一起入侵。它工作得很好,但我不真正了解它是如何工作的 ...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));
我欣赏的代码是有点特殊,但我认为正在发生的事情如下:
- 我创建委托,它接受许多参数并返回一个IQAllrable键入SecurityAudit。
- 我创建一个编译的查询等
我可以通过做somethign像这样(对不起,我没有这个确切代码手)现在消耗这个...
的IList = someDataContext .MatchedIPAddressesAuditRecords(“username”,“ipaddress”,24).ToList();
我不明白的是IQueryable是如何在这里工作的? - 我是否将查询的接口返回给我的调用方法? - 我的编译查询在哪里存储以及何时执行? - 返回接口IQueryable的相关性是什么?
对于如何实际工作的一些解释很有帮助。
谢谢。
想到这可能会发生什么是IQueryable表示从我的编译查询返回的表达式树。 ToList()被调用时评估该表达式树。这可能吗? –
Remotec
2010-03-02 11:54:04