此代码是否会延迟事件日志的检索,直到它们被查询?

Does this code defer retrieval of the event logs until they've been queried?

其中 log 是类型 EventLog 的对象,此代码...

log.Entries.Cast<EventLogEntry>().Where(x => x.TimeGenerated == myDate).ToList();

...在检索所有日志之前以某种方式查询(我的 Where lambda)以使其性能更好? (类似于 EF 处理数据库查询的方式)还是首先将整个日志拉入内存并从那里过滤?

如果是后者,是不是'best'(即快,多'performant')改用this approach(即传入XML让查询举重)?

我可能措辞有点尴尬,我基本上是在问我提到的第一种方法是否查询效率低下。

不,它并没有表现得更好,因为 log.Entries 实现简单 IEnumerable,而不是像 IQueryable 这样的东西(例如 EF 所做的)。这意味着它不会分析您的 "Where" 子句表达式树,也不会在枚举之前以某种方式将其转换为事件查询。所以你的查询大致相同:

var result = new List<EventLogEntry>();
foreach (EventLogEntry x in log.Entries) {
    if (x.TimeGenerated == myDate) {
        result.Add(x);
    }
}
return result;