मैं NHibernate में निम्नलिखित एसक्यूएल परिवर्तित करने के लिए कोशिश कर रहा हूँ:पर एक श्रृंखलाबद्ध पूरा नाम फजी खोजें NHibernate
SELECT * FROM dbo.Customer
WHERE FirstName + ' ' + LastName LIKE '%' + 'bob smith' + '%'
मैं इस तरह कुछ करने के लिए कोशिश कर रहा था, लेकिन यह काम नहीं कर रहा:
name = "%" + name + "%";
var customers = _session.QueryOver<Customer>()
.Where(NHibernate.Criterion.Restrictions.On<Customer>(c => c.FirstName + ' ' + c.LastName).IsLike(name))
.List();
जो मैं मूल रूप से करने की कोशिश कर रहा हूं वह "बॉब स्मिथ" के उदाहरण मान के साथ टेक्स्ट बॉक्स में किसी ग्राहक के नाम की खोज करने में सक्षम है और इसके लिए उपरोक्त SQL में LIKE अभिव्यक्ति का उपयोग करके डेटाबेस को खोजने के लिए है।
यदि मैं फर्स्टनाम और लास्टनाम कॉलम को गलत तरीके से खोजने जा रहा हूं, तो कृपया मुझे एक विकल्प के साथ मदद करें, लेकिन उपर्युक्त SQL क्वेरी मुझे जो चाहिए उसे प्राप्त करती है। 2 समाधान के साथ
अद्यतन:
इसलिए मैं अब इस समस्या का दो समाधान मिल गया है। एक मानदंड एपीआई का उपयोग करना है। निम्नलिखित पोस्ट में एक उत्तर है जो महान काम करता है: https://stackoverflow.com/a/2937100/670028
अन्य समाधान जो मैंने पाया है, मेरे सहायक सहकर्मियों में से एक को धन्यवाद जो LINQ प्रक्षेपण और अज्ञात प्रकारों का उपयोग करने का सुझाव देते हैं।
var customers = session.Query<Customer>()
.Select(x => new { FullName = x.FirstName + " " + x.LastName, Customer = x })
.Where(x => x.FullName.Contains("Bob Smith"))
.Select(x => x.Customer)
.ToList();
आपको एक संक्षिप्त एसक्यूफंक्शन का उपयोग करके प्रोजेक्शन पर 'प्रतिबंध' जैसे 'उपयोग करना होगा। मुझे नहीं लगता कि एनएच आपके लिए स्ट्रिंग कॉन्सट प्रोजेक्शन बनाने के लिए पर्याप्त स्मार्ट है। – dotjoe
अद्यतन: मैंने इस मामले में एनएचबीर्नेट कोड को बहुत गन्दा पाया और बस संग्रहीत प्रक्रिया के साथ चला गया। मैं वास्तव में जितनी ज्यादा हो सके संग्रहित प्रक्रियाओं से बचने की कोशिश करता हूं लेकिन कभी-कभी स्वयं को एसक्यूएल को क्रैंक करना आसान होता है। –