मुझे इवेंटलॉग से आने वाली घटनाओं को संसाधित करने की आवश्यकता है। EventRecordWritten ईवेंट से अटैचमेंट EventLogWatcher का उपयोग करना आसान है। हालांकि जिस प्रश्न में मुझे रूचि है (eventid == 299 || eventid == 500) मुझे जो चाहिए उससे ज्यादा घटनाएं प्रदान करता है। यहाँ धाराइवेंट लॉग से प्रोसेसिंग इवेंट्स और एक निश्चित पैटर्न (आरएक्स?) पर प्रतिक्रिया दें
Event ID Correlation ID
299 1AD... (this is actually a guid) X1
500 1AD... X2
500 1AD...
500 1AD...
299 43B... Y1
299 EDB... Z1
500 43B... Y2
500 EDB... Z2
500 43B...
500 43B...
मैं घटना 299 और पहली घटना 500 कि 299 घटना के सहसंबंध आईडी से मेल खाता है में दिलचस्पी का एक उदाहरण है। मैं उनके ऊपर धारा में चिह्नित, कि उत्पादन संग्रह मैं में दिलचस्पी है: [X1, X2, Y1, Y2, Z1, Z2]
जो शायद एक शब्दकोश एक कुंजी के रूप सहसंबंध आईडी और मूल्य के रूप में EventRecord
की एक टपल उपयोग कर रहा है
{ 1AD.., <X1, X2> }
{ 43B.., <Y1, Y2> }
{ EDB.., <Z1, Z2> }
सामान्य घटनाओं आ सकते में क्रम में (2 9 9 और फिर 500) लेकिन एक उच्च समेकन की स्थिति में मैंने दो 29 9 घटनाओं को एक साथ आने और फिर 500 घटनाओं की भविष्यवाणी की, इसलिए मैं घटनाओं के आदेश पर भरोसा नहीं करना चाहता हूं। सहसंबंध आईडी उनसे सहसंबंध करने की कुंजी है (जो eventRecord.Properties[0]
घटना की पहली संपत्ति है)
मुझे लगता है कि इसे एक राज्य मशीन के साथ हल किया जा सकता है लेकिन यह देखना दिलचस्प होगा कि कोई भी आरएक्स के साथ समाधान के साथ आता है या नहीं एक अवलोकन करने के लिए एक प्रश्न द्वारा प्रतिनिधित्व किया। वह पैटर्न मिलान तर्क को एक ही स्थान पर रखेगा।
अद्यतन: यहां समाधान का उत्तर दिया गया है। धन्यवाद गिदोन यह बिल्कुल शुरुआती बिंदु था जिसकी मुझे आवश्यकता थी!
var pairs = events
.Where(e299 => e299.EventArgs.EventRecord.Id == 299)
.SelectMany(e299 => events.Where(e500 => e500.EventArgs.EventRecord.Id == 500 &&
e299.EventArgs.EventRecord.Properties[0].Value.ToString() ==
e500.EventArgs.EventRecord.Properties[0].Value.ToString())
.Take(1),
(e299, e500) => new { First = e299, Second = e500 });
अग्रिम धन्यवाद, मटीस
पर स्पॉट! धन्यवाद गिडोन ... लैम्ब्डा का उपयोग करने और क्वेरी (1) को मेरे उत्तर – woloski