यह फ़ंक्शन किसी उपयोगकर्ता खोज इनपुट के लिए संपर्क सूची वापस करने के लिए उपयोग किया जाता है। खोज शब्द की संख्या हमेशा कम से कम एक होती है, लेकिन कई हो सकती हैं।लिंक 2 एसक्यूएल क्वेरी में क्लॉज की अनिश्चित संख्या को गतिशील रूप से जोड़ने का सही तरीका क्या है?
public IList<Contact> GetContacts(string[] searchTerms)
{
using (dbDataContext db = new dbDataContext())
{
var contacts = from _contacts in db.Contacts
orderby _contacts.LastName ascending, _contacts.FirstName ascending
select _contacts;
foreach (string term in searchTerms)
{
contacts = (IOrderedQueryable<Contact>)contacts.Where(x => SqlMethods.Like(x.FirstName, "%" + term + "%")
|| SqlMethods.Like(x.MiddleName, "%" + term + "%")
|| SqlMethods.Like(x.LastName, "%" + term + "%")
|| SqlMethods.Like(x.PreferredName, "%" + term + "%"));
}
return contacts.ToList<Contact>();
}
}
समस्या लूप में है। केवल अंतिम खोज शब्द का उपयोग कभी भी किया जाता है, भले ही जेनरेटेड एसक्यूएल सही दिखता है (जैसा कि शब्दों की संख्या के लिए खंडों की सही मात्रा में उत्पन्न होता है)।
उदाहरण - यदि मैं दो शब्द ('एंड्र', 'एसएम') पास करता हूं, तो एसक्यूएल उत्पन्न खंडों के दो ब्लॉक दिखाता है, लेकिन दोनों ब्लॉक में केवल 'sm' को param के रूप में उपयोग करता है।
मैं क्या गलत कर रहा हूं? क्या मुझे एसक्यूएलएमआईड्स का भी उपयोग करना चाहिए?
आप कहते हैं कि उत्पन्न एसक्यूएल सही दिखता है, क्या आप इसे पोस्ट कर सकते हैं? क्या आपने जेनरेट किए गए SQL को मैन्युअल रूप से चलाने का प्रयास किया है? –
हाँ यदि मैं मैन्युअल रूप से चलाता हूं तो यह काम करता है, यह सरणी में अंतिम 'टर्म' का उपयोग सभी पैराम्स के लिए सर्वो के रूप में कर रहा है। अजीब। – IckleMonkey