[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 で入力した文字に勝手に取り消し線が入る

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