2013-05-08 13 views
6

मैं Ormlite यहाँ की SqlExpressionVisitor का उपयोग कर अशक्त cheking मापदंडों से एक विधि के साथ तालिका क्वेरी करने के लिए एक विधि लिखने के लिए चाहते हैं में ServiceStack Ormlite SqlExpressionVisitor अशक्त जांच मेरी विधि है किसी वस्तु के उदाहरण के लिए। जब मैं ev कहता हूं तो NullReferenceException फेंक दिया जाता है। भाग कहाँ है।कहाँ विस्तार

क्या यहां कोई बग है या मुझे कुछ याद आ रहा है? धन्यवाद।

उत्तर

5

आप वास्तव में ऊपर ExpressionVisitor पद्धति का चयन करें अंदर इतनी तरह का निर्माण कर सकते हैं:

var chats = db.Select<UserChatsDTO>(q => q 
    .Where(x => startDate.HasValue && x.Date >= startDate) 
    .Where(x => endDate.HasValue && x.Date <= endDate) 
    .Where(x => string.IsNullOrEmpty(operatorName) || x.TakeByUser.Contains(operatorName)) 
    .Where(x => rating.HasValue && x.Rating == (short)rating) 
    .Where(x => string.IsNullOrEmpty(visitorName) || x.VisitorName.Contains(visitorName) 
    .Limit(startRow, rowCount)); 
+0

मुझे अभी भी इस दृष्टिकोण के साथ एक NullReferenceException मिल रहा है। मैंने एक कामकाजी समाधान जोड़ा है। –

3

मैं जानता हूँ कि इस सवाल का 7 महीने पुरानी है, लेकिन मैं ने वही समस्या & था इस पहला सवाल है कि आया था जब मैं खोजा गया। मैं अपने कामकाजी समाधान को जोड़ना चाहता था क्योंकि मास्टर नैतिकता ने मेरे लिए काम नहीं किया था।

मूल रूप से, मैंने लगभग सरफैक्सन के पहले प्रयास के समान वाक्यविन्यास की कोशिश की। मुझे वही NullReferenceException मिला जो उसने किया था। मास्टर नैतिकता के जवाब ने या तो मदद नहीं की ...

मैं एक खोज फ़ंक्शन बनाने की कोशिश कर रहा हूं जो सटीक मिलान की बजाय पसंद की खोज करता है। अनुरोध ऑब्जेक्ट पर कई मानदंड हैं जो शून्य हो सकते हैं या नहीं हो सकते हैं (सादगी के लिए हम 2 मानदंडों के साथ एक उदाहरण का उपयोग करेंगे)। मास्टर नैतिकता के सुझाव के बाद, मैंने यह कोशिश की:

var searchResults = db.Select<Item>(q => q 
     .Where(x => string.IsNullOrWhiteSpace(request.Criteria1) || x.Criteria1.Contains(request.Criteria1)) 
     .Where(x => string.IsNullOrWhiteSpace(request.Criteria2) || x.Criteria2.Contains(request.Criteria2)) 
    ); 

मुझे अभी भी एक NullReferenceException मिला है। लगता है कि & & और || ऑपरेटर लैम्ब्डा अभिव्यक्ति के अंदर शॉर्ट-सर्किट मूल्यांकन का उपयोग नहीं कर रहे हैं।

SqlExpressionVisitor<Item> ev = new ServiceStack.OrmLite.MySql.MySqlExpressionVisitor<Item>(); 

if (!String.IsNullOrWhiteSpace(request.Criteria1)) { 
    ev.Where(q => q.Criteria1.Contains(request.Criteria1)); 
} 
if (!String.IsNullOrWhiteSpace(request.Criteria2)) { 
    ev.Where(q => q.Criteria2.Contains(request.Criteria2)); 
} 

searchResults = db.Select<Item>(ev); 

यह बहुत सुंदर महसूस नहीं करता है, लेकिन यह केवल एक चीज मैं मिल सकता है कि काम करता है:

क्या मैं अंत में साथ जाना था यह है।