मुझे लगता है कि स्ट्रिंग के रूप में तुलना करना काफी सुरक्षित है, जब तक कि आपके पास वर्ष <1000 या> 9999 न हों:
... dr.stringYear.CompareTo(myNumberString) > 0
EF इसका अनुवाद SQL विधेय जैसे
. में करता हैWHERE [alias].[stringYear] > @p
जो SQL में संभव है लेकिन C# में नहीं।
एक फायदा यह होगा कि stringYear
. पर कोई भी इंडेक्स एक निष्पादन योजना में प्रयोग करने योग्य हो सकता है। कनवर्ट कर रहा है stringYear
to number किसी भी इंडेक्स को हटा देता है।
यह विधि तब भी उपयोगी होती है जब स्ट्रिंग कॉलम में जंजीर स्ट्रिंग मान होते हैं। ऐसे मामले में विधेय को लंबाई के साथ जोड़ा जाना चाहिए। उदाहरण के लिए, उन सभी इकाइयों को खोजने के लिए जहां पूर्णांक के रूप में कोई भी संख्यात्मक स्ट्रिंग कुछ संदर्भ मान से अधिक है
var len = myNumberString.Lenght;
var query =
from row in context.LegacyTable
where row.NumericString.CompareTo(myNumberString) > 0
&& row.NumericString.Length >= len
select row;
तब क्वेरी इंजन लंबाई की तुलना के लिए अनुक्रमणिका का उपयोग नहीं कर सकता है, लेकिन यह >
के लिए ऐसा करने में सक्षम हो सकता है तुलना।