2013-05-02 3 views
2

일부 기준에 따라 Windows 로그를 가져오고 필터링하려고합니다. 그 중 하나는 Message 필터입니다. Message 속성은 EventLog.GetEventLogs().Entries.Message입니다. 문제는 EntriesEventLogEntryCollection이고 람다 식 (여기서)을 실행할 수 없습니다. 또한 IEnumberable (List) 형식으로 캐스팅 시도했지만 예외를 throw하고 캐스팅 할 수 없습니다. 다른 문제는 읽기 전용 속성이므로 새로운 EventLog 개체를 만들고 수동으로 항목을 추가하는 것이 거의 불가능하다는 것입니다. 처음에 내가 시도하는 것은이었다IEnumerable이 아닌 유형의 람다 식을 사용하여 Windows 로그 필터링

List<EventLog> filteredList = EventLog.GetEventLogs().Where(
x => string.Equals(x.LogDisplayName, "Some Value")).Where(x => x.Entries.Where(... 

그러나이 IEnumberable 아니기 때문에 분명히 Entries.Where()이 작동하지 않습니다. 나는 몇 시간 동안 다른 해결책을 생각해 왔지만 지금은 희망이 없다. 어떤 도움이라도 대단히 감사합니다.

+1

'GetEventLogs() '를 반환 배열,'T []'는'IEnumerable '을 구현한다. 그래,이게 효과가있다. 어떤 컴파일러 오류가 발생합니까? – cdhowie

+2

항목을 사용해보십시오 .OfType (). (.... – jure

+0

'GetEventLogs()'에는'Where'를'x.Entries'에 대해서는 실행할 수 없습니다 – PoweredByOrange

답변

6

EventLogEntryCollection (쿼리에서 x.Entries에 의해 반환 된 개체 유형)은 IEnumerable<EventLogEntry>이 아닌 IEnumerable 만 구현합니다. Linq는 방법과 그것을 사용하려면 각 요소를 캐스팅해야합니다 :

x => x.Entries.Cast<EventLogEntry>().Where(... 

Cast<T>()IEnumerable를 받아이 실패 할 경우 ClassCastException를 제기, 각 요소는 단순히 요구 된 타입에 캐스트하는 IEnumerable<T>을 반환합니다. EventLogEntry은이 컬렉션에 있어야하는 유일한 유형의 개체이므로 안전한 작업입니다.

(OfType<T>()는 예외를 발생시키는 것이 아니라 요청 형식으로 캐스팅 할 수없는 요소를 생략하는 것 이외에는. 특히이 경우, 관찰 동작은 동일해야 유사하다.)

+0

좋아, 그게 효과가 좋았어. (아마 잘못된 방식으로 생각했기 때문일거야.) 500 개의'EventLogEntries'를 가진'EventLog'가 있다고 가정 해 봅시다. 그 중 3 항목은'magical word'라는 단어를 포함하고 있습니다 .example을 실행하면'filteredList'라는 표현식을 사용하여 엔트리에있는 3 가지 요소 만 가진 로그를 갖지만, 지금 필터링 된 List는 500 개의 모든 항목을 보여줍니다. 이것에 대한 생각? – PoweredByOrange

+0

당신이 무엇을 요구하고 있습니까? "EventLogEntry"가 내 조건과 일치하는 "EventLog"객체를 나에게 돌려 준다 "만약 당신이 단지'EventLogEntry' 객체 만 원한다면'EventLog'를 축소하기 위해서'SelectMany()'를 사용해야 할 것입니다. 객체들을'EventLogEntry' 객체의 편평한 시퀀스로 분해 한 다음 그 객체들을 필터링합니다. – cdhowie

+0

흠 ... 이것은 내가 시도한 것입니다 : 'List filteredList = EventLog.GetEventLogs(). (x => x.Entries.OfType (). SelectMany (y => y.Source) .Where ToList(); ' 하지만 일부 항목에'MyValue '가 있어도 빈 목록을 반환했습니다 (y => string.Equals (y, "MyValue")). – PoweredByOrange