下面是如何使用yield return
的懶惰評估功能來解決這個問題的想法。給定一個查詢中使用EventLogQuery
來執行,你可以做如下:
public IEnumerable<EventRecord> QueryEventRecords(string queryString)
{
var query = new EventLogQuery("Application", PathType.LogName, queryString);
using (var reader = new EventLogReader(query))
{
EventRecord eventRecord;
while ((eventRecord = reader.ReadEvent()) != null)
{
yield return eventRecord;
}
}
}
然後你就可以執行查詢,然後使用自己喜歡的LINQ運營商在IEnumerable
。
var result = QueryEventRecords("*[System[(Level = 3)]]")
.Skip(10)
.Take(10)
.ToList();
也就是說,尋呼遠程PC不會在MVC應用程序飛 - 護屏分頁之間的迭代器的有狀態不會是可取的。最好是從遠程計算機中預先獲取感興趣的查詢中的所有事件,並將其保存到中央數據庫(即類似於企業軟件,如SCOM)。然後,您可以使用EF等ORM在閒暇時瀏覽事件數據。