2010-01-24 13 views
10

में परिणामसेट लौटने से पहले रिकॉर्ड के अस्तित्व की जांच करें, मैं डेटा को पुनर्प्राप्त करने का प्रयास करने से पहले एक रिकॉर्ड मौजूद है या नहीं, यह सत्यापित करने के लिए मेरे मानक जंक तरीके को प्रतिस्थापित करने के लिए एक सरल समाधान की तलाश में हूं। वर्तमान में, जब भी अपने तरीकों में से एक कहा जाता है, मैं कुछ के प्रभाव के लिए करते हैं ...LINQ से SQL

private Record DoSomething(int id) 
{ 
    if(data.Records.Count(q=>q.Id==id) > 0) 
    { 
     return data.Records.First(q=>q.Id==id); 
    } 
    return null; 
} 

... जहां मैं हमेशा रिकॉर्ड की गिनती की जांच एक रिकार्ड के अस्तित्व निर्धारित करते हैं। डेटाबेस को दो बार कॉल किए बिना, ऐसा करने का एक और "सुरुचिपूर्ण" तरीका होना चाहिए। क्या उधर रास्ता है?

उत्तर

15

इसे संभालने के लिए बहुत सारे साफ तरीके हैं। आप पहली बार Recordid करने के लिए इसी चाहते हैं तो आप कह सकते हैं: आप कितने ऐसे Record मौजूद है की गिनती चाहते हैं

return data.Records.Any(r => r.Id == id); // true if exists 

:

Record record = data.Records.FirstOrDefault(r => r.Id == id); 
if(record != null) { 
    // record exists 
} 
else { 
    // record does not exist 
} 

आप केवल अगर ऐसी Record मौजूद जानना चाहते हैं :

return data.Records.Count(r => r.Id == id); 

आप ऐसे सभीका एक गणना (IEnumerable<Record>) चाहते हैं:

return data.Records.Where(r => r.Id == id); 
+0

मुझे लगता है कि यदि एक से अधिक रिकॉर्ड लौटा दिया जाता है SingleOrDefault एक अपवाद फेंक देते हैं। चूंकि यह एक आईडी क्वेरी की तरह दिखता है, यह संभवतः यह मानना ​​सुरक्षित है कि सिंगलऑर्डिफॉल्ट ठीक रहेगा, लेकिन फर्स्टऑरडिफॉल्ट मुझे लगता है कि अधिक सामान्य है। –

+2

'कोई भी (आर => आर.आईडी == आईडी) 'पसंदीदा है क्योंकि यह अधिक कुशल है (परिणामस्वरूप' COUNT' के बजाय' EXISTS' होगा)। – JulianR

1
Record record = data.Records.FirstOrDefault(q => q.Id == id); 
return record;