2011-06-01 17 views
8

मैं अपने क्वेरी बनाने के लिए की तरह एक उत्पादन SQL क्वेरी में परिणाम की क्या ज़रूरत है:इकाई की रूपरेखा v4.1 तरह

SELECT 
[viewRegisters].[Id] AS [IdRegister] 
WHERE Name LIKE '%a%bc' 

या

SELECT 
[viewRegisters].[Id] AS [IdRegister] 
WHERE Name LIKE 'a%b%c' 

या

SELECT 
[viewRegisters].[Id] AS [IdRegister] 
WHERE Name LIKE 'a%b%c%' 

मैं मैं नेट फ्रेमवर्क 4.0, इकाई फ्रेमवर्क v4.1 और सी # का उपयोग कर रहा हूँ।

((IQueryable<T>)Data).Where(z => z.Field.Contains("a%b%c%")); 

में:

SELECT 
[viewRegisters].[Id] AS [Id] 
WHERE Name LIKE N'a~%b~%c~%' ESCAPE N'~' 

यही नहीं है जो मैं चाहता

एफई v4.1 से LINQ प्रश्नों के इस प्रकार बदल देता है। मैं 'प्रतिशत' प्रतीक का उपयोग करने में सक्षम होना चाहता हूं क्योंकि मैं सीधे डीबी में करता हूं।

+0

में अनुवाद आमतौर पर .Contains एक जैसा –

उत्तर

1
var query = from viewRegister in context.ViewRegisters 
where viewRegister.Name.Contains("yourname") 
select viewRegister; 
7

यदि आप पूर्ण वाइल्डकार्ड समर्थन चाहते हैं तो आपको ESQL का उपयोग करना होगा। लिंक-टू-एंटिटीज ऐसा करने में सक्षम नहीं है और ईएफवी 4.1 कोड पहले (ईडीएमएक्स के बिना) doesn't have support for model defined functions इसलिए @ जोहान ब्लैस द्वारा प्रदान किया गया समाधान का उपयोग नहीं किया जा सकता है।

मैं ESQL क्वेरी चलाने के लिए कोड लगता है की तरह देख सकते हैं:

string command = "SELECT VALUE e FROM ContextName.DbSetName AS e WHERE e.Field LIKE 'a%b%c%'" 
ObjectContext ctx = ((IObjectContextAdapter)dbContext).ObjectContext; 
ObjectQuery<EntityType> query = new ObjectQuery<EntityType>(command, ctx); 
ObjectResult<EtntiyType> result = query.Execute(MergeOption.AppendOnly); 
+1

में यह परिणाम होगा वहाँ उपयोग करने के लिए है कि संयोजन में PredicateBuilder के साथ एक तरीका है? – Gil

4

आप एसक्यूएल सर्वर का उपयोग कर रहे हैं, तो PATINDEX फ़ंक्शन का उपयोग एक पैटर्न खोज करने के लिए। आप इस फ़ंक्शन को SqlFunctions कक्षा का उपयोग करके ईएफ के माध्यम से एक्सेस कर सकते हैं।

उदाहरण के लिए

, निम्नलिखित एफई क्वेरी

context.ViewRegisters.Where(z => SqlFunctions.PatIndex("a%b%c%", z.Name) > 0); 

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name] 
FROM [dbo].[ViewRegisters] AS [Extent1] 
WHERE (CAST(PATINDEX(N'a%b%c%', [Extent1].[Name]) AS int)) > 0 
+0

मैं इसके साथ प्रयास करूंगा, मुझे लगता है कि समस्या यह है कि पैटर्न स्ट्रिंग को sanitized (एसक्यूएल इंजेक्शन के लिए) की जरूरत है। –

+0

मैंने इसे SQL सर्वर और ईएफ कोड में करने की कोशिश की और हर बार एक बड़ी वसा विफल हो गई। यह टेबल में हर एक परिणाम लौटा! – Matt

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