Я получил следующий код, который я взломал из примеров на сайте.Это хорошо работает, но я не совсем понимаю, как это работает ...
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));
Я ценю, что код немного специфичен, но я думаю, что происходит следующим образом:
- Я создаю делегат, который принимает несколько параметров и возвращает IQuerable, набранный в SecurityAudit.
- Я создаю скомпилированный запрос и т. Д.
Теперь я могупотреблять это, выполняя что-то вроде этого (извините, у меня нет точного кода под рукой) ...
IList = someDataContext.MatchedIPAddressesAuditRecords ("username", "ipaddress", 24).ToList ();
Что я не понимаю, так это то, как здесь работает IQueryable?- Я возвращаю интерфейс для запроса к моему вызывающему методу?- Где хранится мой скомпилированный запрос и когда он выполняется?- Какое значение имеет возвращение интерфейса IQueryable?
Было бы полезно получить некоторое объяснение о том, как это на самом деле работает.
Спасибо.