2009-05-27 14 views
5

में केस अपमानजनक आदेश SQLite.net (http://sqlite.phxsoftware.com) का उपयोग कर एक सी # प्रोग्राम से SQLite का उपयोग कर रहा हूं।एसक्यूएलएइट में .net

डिफ़ॉल्ट रूप से SQLite खंड द्वारा क्रमबद्ध चयन केस केस संवेदनशील है, मैं परिणाम को असंवेदनशील केस सॉर्ट करना चाहता हूं, मुझे "कॉलेज नॉक" मिला लेकिन दस्तावेज कहता है कि यह केवल एसीआई रेंज में अंग्रेजी वर्णों को संभालेगा, मुझे सच भाषाई चाहिए CultureInfo.CurrentCulture collation का उपयोग कर अंतरराष्ट्रीय मामला असंवेदनशील प्रकार (इसे स्ट्रिंग.कंपियर का उपयोग करने से चाल चलती है)।

धन्यवाद

उत्तर

3

मेरा मानना ​​है कि इस तरह के मिलान SQLite के वर्तमान संस्करण में प्रदान नहीं की है। ऐसा लगता है कि सबसे समझदार योजना क्वेरी से सॉर्ट को निकालना है और इसके बाद शुद्ध में बाद में सॉर्ट करें। नेट जहां आपके पास पूर्ण नियंत्रण है और थ्रेड की संस्कृति जानकारी जैसे संरचनाओं तक पहुंच है।

चूंकि दोनों एक ही प्रक्रिया में हो रहे हैं, इसलिए प्रदर्शन डेटा में कोई बड़ा अंतर नहीं होना चाहिए जब तक कि आपका डेटासेट बहुत बड़ा न हो।

SQLite 3 उपयोगकर्ता परिभाषित संयोजन कार्यों को अनुमति देता है, और इन्हें SQLite.Net में .NET फ़ंक्शंस में किया जा सकता है लेकिन प्रबंधित/अप्रबंधित सीमा में आगे और आगे कॉल करने का ओवरहेड काफी है। यहां एक persons attempts to do it in c++ है। जब तक आपके पास किसी और की अच्छी तरह से परीक्षण और स्थिर यूनिकोड संस्कृति तक पहुंच न हो तो सी ++ में संवेदनशील प्रकार मैं संभवतः दृष्टिकोण के बाद सरल प्रकार के चिपके रहने का सुझाव देता हूं।

बेशक यदि उपयोगकर्ता परिभाषित संयोजन का प्रदर्शन आपकी वर्तमान आवश्यकताओं के लिए पर्याप्त से अधिक है तो उसके साथ जाएं।

[SQLiteFunction(Name = "CULTURESORT", FuncType = FunctionType.Collation)] 
class CultureSort : SQLiteFunction 
{ 
    public override int Compare(string param1, string param2) 
    { 
     return String.Compare(
      param1,param2, CultureInfo.CurrentCulture, CompareOptions.IgnoreCase) 
     ); 
    } 
} 

पोस्ट स्क्रिप्ट यदि आप कल्पना हो रही कल्पना: वहाँ SQLite की एक धन्य निर्माण है जो integrates the ICU library आदेश पर 'उचित' यूनिकोड समर्थन/के लिए की तरह/ऊपरी/निचले लेकिन आप को एकीकृत करने की है कि SQLite कोड में की आवश्यकता होगी नेट रैपर के लिए समर्थन के रूप में इस्तेमाल किया। यह बहुत आसान नहीं है।

0

ऐ, यह बहुत जटिल है कि आप अनुमान लगाएंगे। कुछ संस्कृतियों में नियम अलग-अलग होते हैं और बिना किसी संस्कृति के आप इसे किस आधार पर आधार बनाना चाहते हैं, यह असंभव हो जाता है। Turkish के प्रसिद्ध (amoung i18n लोगों) उदाहरण पर विचार करें।

1

SQLite.NET आपको सी # में कस्टम फ़ंक्शंस को परिभाषित करने की अनुमति देता है जिसे आप SQL क्वेरी में उपयोग कर सकते हैं। तो यह सी # में एक custom_upper या custom_lower समारोह है कि वर्तमान संस्कृति मिलान के साथ मामला रूपांतरण संभाल होगा ... लिखने के लिए संभव हो जाना चाहिए

-1

आप त्वरित परिणाम प्राप्त करने के लिए ToLower() विधि का उपयोग कर सकते हैं:

return model.Users.OrderBy(u => u.Name.ToLower()).ToList(); 
+0

toooo धीमी गति से) पूरी स्ट्रिंग परिवर्तित सिर्फ पात्रों में से पहले दो का उपयोग करने के –

+0

आप इसे की कोशिश की? यह रूपांतरण एसक्यूएल पक्ष पर होता है। – Rover

+0

हां। मुझे नहीं लगता कि एमएसआईएल को दोनों तरफ अलग तरीके से व्याख्या किया जाता है। –

0

आप बस lower() SQLite फ़ंक्शन का उपयोग कर सकते हैं:

select * from data order by lower(name) 
+0

नहीं, नहीं, काम नहीं करता है, लेकिन सैद्धांतिक रूप से सही –

+0

सही तरीके से डेटा आदेश से नीचे (नाम), –

+0

का चयन किया जाएगा, मुझे नहीं लगता कि यह क्यों काम नहीं करेगा? – njzk2

संबंधित मुद्दे