2015-04-16 5 views
6

हम एक LINQ अभिव्यक्ति में विधि .Contains(string) उपयोग कर सकते हैं, इस तरह '% खोज पाठ%', विधि .StartsWith(string), ऐसे ही 'खोज पाठ%' लगता है लगता है, और विधि .EndsWith(string), कि लगता है '% खोज टेक्स्ट' की तरह।LINQ क्वेरी कहाँ() एसक्यूएल% बराबर

लेकिन मुझे ऐसा कुछ चाहिए जो '% search% text%' लगता है, जो 'खोज' और 'टेक्स्ट' वाली सभी सामग्री पाता है, लेकिन अनुक्रमिक नहीं है।

उदाहरण: पाठ

पाठ

एसक्यूएल में, LIKE '%search%text%' साथ क्वेरी लाता है की तलाश के लिए अपने पाठ

खोज खोज

: मैं इन रिकॉर्ड है:

खोज मेरी पाठ

खोजपाठ

के लिए लेकिन नहीं 'seek the text' लाता है।

कोई विचार?

+2

नियमित अभिव्यक्तियों का उपयोग करें: '।' '' '' '' '' '' '' '' '' '' '' '' '' – zerkms

+4

के साथ बदलें? क्या यह काम करता है? 'शामिल है (" खोज ")। इसमें शामिल है (" टेक्स्ट ") 'मेरे कोड में कुछ वाक्यविन्यास त्रुटियां हो सकती हैं, लेकिन मुझे आशा है कि आपको मेरा विचार मिल जाएगा। – Turtle

+0

क्या आप ऑब्जेक्ट्स पर LINQ का उपयोग कर रहे हैं, या LINQ-to-SQL? – Blorgbeard

उत्तर

7

आप सहायक विधि से एक का उपयोग कर सकते हैं:

var result = from o in ctx.table 
where SqlMethods.Like(o.column, "%search%text%") 
select o.column; 
0

आप कुछ इस तरह इस्तेमाल कर सकते हैं:

var rx = new Regex("search.*text", RegexOptions.IgnoreCase); 
List<string> lists=new List<string>(){"search text","search this text","search my book"}; 
var result = lists.Where(x => rx.IsMatch(x)); 

आप "% पाठ खोज" के रूप में इनपुट हो रही हैं, तो तो आप "%" को "। *" से प्रतिस्थापित कर सकते हैं और रेग एक्स पैटर्न के रूप में उपयोग कर सकते हैं।

+1

का उपयोग कर रहा हूं आप linq से sql के साथ regex का उपयोग नहीं कर सका। आपको पहले मेमोरी में सभी डेटा चुनने की आवश्यकता होगी और फिर रेगेक्स के साथ फ़िल्टर करें, जो कार्यक्षमता की तुलना में अक्षम है जो एसक्यूएल परत पर डेटा फ़िल्टर करेगा और पहले ही फ़िल्टर किए गए डेटा को वापस कर देगा। –

+0

आपका क्या मतलब है? मैं आसानी से कर सकता था: 'x से सूचियों में जहां rx.IsMatch (x) x का चयन करें;', यदि आप linq के sql के मामले में फ़िल्टरिंग के बारे में कह रहे हैं, तो, हाँ, आप सही हैं, कोड स्मृति में फ़िल्टर करता है एसक्यूएल सर्वर में स्वयं फ़िल्टरिंग बना रहा है, हालांकि एसक्यूएल के लिए linq का उपयोग करने के लिए अलग ओवरहेड है। – ANewGuyInTown

+0

मेरा मतलब है कि यदि आपके पास अरब पंक्तियां हैं और केवल 10 पंक्तियों को फ़िल्टर करना चाहते हैं तो आपको उन अरब पंक्तियों को स्मृति में लोड करने की आवश्यकता होगी जो एक बड़ा ओवरहेड –

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