निम्नलिखित LINQ बयान:यह LINQ-to-SQL क्वेरी को NotSupportedException क्यों मिलता है?
System.NotSupportedException:: स्थानीय अनुक्रम क्वेरी ऑपरेटरों को छोड़कर की कार्यान्वयन SQL करने के लिए LINQ में नहीं किया जा सकता
public override List<Item> SearchListWithSearchPhrase(string searchPhrase) { List<string> searchTerms = StringHelpers.GetSearchTerms(searchPhrase); using (var db = Datasource.GetContext()) { return (from t in db.Tasks where searchTerms.All(term => t.Title.ToUpper().Contains(term.ToUpper()) && t.Description.ToUpper().Contains(term.ToUpper())) select t).Cast<Item>().ToList(); } }
मुझे इस त्रुटि देता है कंटेनर() ऑपरेटर।
इसके चारों ओर देख रहे हैं लगता है मेरी ही एकमात्र विकल्प एक सामान्य सूची में सभी मेरे आइटम पहले प्राप्त करने के लिए है, तो उस पर एक LINQ क्वेरी करना है।
या क्या त्रुटि से बचने के लिए उपरोक्त LINQ-to-SQL कथन को फिर से भरने का एक चालाक तरीका है?
उत्तर:
धन्यवाद रैंडी, अपने विचार मुझे मदद की निम्नलिखित समाधान का निर्माण करने के लिए। यह सुरुचिपूर्ण नहीं है लेकिन यह समस्या हल करता है और चूंकि यह कोड उत्पन्न होगा, मैं उदाहरण के लिए संभाल सकता हूं बिना किसी अतिरिक्त काम के 20 खोज शब्द:
public override List<Item> SearchListWithSearchPhrase(string searchPhrase)
{
List<string> searchTerms = StringHelpers.GetSearchTerms(searchPhrase);
using (var db = Datasource.GetContext())
{
switch (searchTerms.Count())
{
case 1:
return (db.Tasks
.Where(t =>
t.Title.Contains(searchTerms[0])
|| t.Description.Contains(searchTerms[0])
)
.Select(t => t)).Cast<Item>().ToList();
case 2:
return (db.Tasks
.Where(t =>
(t.Title.Contains(searchTerms[0])
|| t.Description.Contains(searchTerms[0]))
&&
(t.Title.Contains(searchTerms[1])
|| t.Description.Contains(searchTerms[1]))
)
.Select(t => t)).Cast<Item>().ToList();
case 3:
return (db.Tasks
.Where(t =>
(t.Title.Contains(searchTerms[0])
|| t.Description.Contains(searchTerms[0]))
&&
(t.Title.Contains(searchTerms[1])
|| t.Description.Contains(searchTerms[1]))
&&
(t.Title.Contains(searchTerms[2])
|| t.Description.Contains(searchTerms[2]))
)
.Select(t => t)).Cast<Item>().ToList();
default:
return null;
}
}
}
ध्यान दें कि यह "लागू नहीं किया गया" त्रुटि नहीं है, यह एक "स्थानीय अनुक्रम का उपयोग नहीं किया जा सकता" त्रुटि है। – Lucas
धन्यवाद, –
तय किया गया है कि मुझे यकीन नहीं है कि मैं इसे सही तरीके से पढ़ रहा हूं, यह बहुत सारे ब्रैकेट हैं लेकिन मुझे एक अच्छी तरह से गठित क्लॉज नहीं दिख रहा है। आपकी खोज Terms.All() तारों की एक सूची लौट रही है जो एक खंड नहीं बना है, इसलिए त्रुटि। – Lazarus