[C#] イベントログをラムダ式で検索

イベントログを抽出したい場合、foreach ですべて列挙すると時間がかかってしまう。
これをラムダ式で検索したい場合は、以下のように行う。
// 一週間のうち、ソースが SecurityCenter であるイベントログを取得。
// 戻り値は IEnumerable となる。
var period = DateTime.Now.AddDays(-7);
var logName = "Application";
var machineName = ".";
if (EventLog.Exists(logName, machineName))
{
    var log = new EventLog(logName, machineName);
    var ret = log.Entries.Cast().Where(m => m.TimeGenerated >= period && m.Source == "SecurityCenter");
    log.Close();
}
なお、TimeGenerated には少々癖があり、必ずしもイベントログに書込まれた時間ではないらしい。

EventLogEntry.TimeGenerated プロパティ - msdn
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.eventlogentry.timegenerated%28v=vs.110%29.aspx

このブログの人気の投稿

コピーした行の挿入が表示されない時はフィルタされていないかチェック

Excel で一部の図形だけ固定する