यह मेरे लिए कोई मतलब नहीं है क्यों Linq2EF एक उचित SQL में .ToString()
अनुवाद नहीं करता है कथन, जैसा कि Linq2SQL करता है, केवल माइक्रोसॉफ्ट देव टीम कारण जानता है कि उन्होंने अभी तक इसे लागू क्यों नहीं किया है। :-(
लेकिन आप अगर आप this link.
का पालन करके इस सुविधा के लिए वोट सौभाग्य से वहाँ भी 2 समाधान उपलब्ध हैं इसे लागू करने के प्राथमिकता बढ़ा सकते हैं, उन दोनों मैं में हाल ही में उपयोग एफई प्रश्नों:
मैं) मुझे क्या मदद की पाने के लिए चारों ओर इस सीमा लिए किया गया था IEnumerable<T>
, जहां .ToString()
उपलब्ध है
var customersList = (from c in db.Customers
select c).ToList(); // converts to IEnumerable<T> ...
var customersTest = (from c in customersList
select new {Id=c.ID.ToString()}); // ... which allows to use .ToString()
बयान .ToList()
धर्मान्तरित: एक सूची में क्वेरी बदल सकता है इसलिए की तरह। नोट कि, आवश्यकताओं के आधार पर, आप .AsEnumerable()
का भी उपयोग कर सकते हैं, जिसका लाभ यह है कि स्थगित निष्पादन समर्थित है जो बेहतर है यदि आपके पास एक दूसरे के आधार पर एकाधिक linq प्रश्न हैं या यदि आप विभिन्न पैरामीटर मानों का उपयोग कर रहे हैं (कई इस संकेत के लिए Divega पर धन्यवाद!)।
बाद में आप अगर आप के रूप में आवश्यक आप customersTest
की वस्तुओं के लिए और अधिक गुण जोड़ सकते हैं की जरूरत है कि इस प्रश्न के रूप में आप चाहते हैं, उदा .:
var customersTest2 = from c in customersTest
select new
{
Id = c.Id,
Addresses = from a in db.Addresses where c.Id == a.ReferenzId select a
};
बेशक
उपयोग कर सकते हैं। आप ऊपर दी गई क्वेरी को भी अनुकूलित कर सकते हैं, मैंने इस उदाहरण की पठनीयता के लिए केवल 3 चरणों का उपयोग किया है।
द्वितीय) सरल रूपांतरण के लिए, और आप आगे सबक्वेरी में उत्पन्न क्वेरी का पुन: उपयोग करने के लिए है (और यह IQueryable
रहने के लिए), System.Data.Objects.SqlClient
से SqlFunctions
का उपयोग की जरूरत है, वे सही ढंग से एसक्यूएल प्रश्नों में अनुवाद किया जाएगा।
उदाहरण 1: स्ट्रिंग रूपांतरण के लिए सांख्यिक
var customersTest = from c in db.Customers
select new {
strID=SqlFunctions.StringConvert((double)c.ID)
}
यह मदद करनी चाहिए: दिनांक रूपांतरण
var customersTest = from c in db.Customers
select new {
strDate=SqlFunctions.DateName("dd", c.EndDate)
+"."+SqlFunctions.DateName("mm", c.EndDate)
+"."+SqlFunctions.DateName("yyyy", c.EndDate)
}
उदाहरण 2 (आप dateparts जिन्हें आप नीचे देख उपयोग करने के लिए है) आप ज्यादातर स्थितियों में से जहां तारों में रूपांतरण की आवश्यकता होती है।
अद्यतन: आप लिंक मैं अपने जवाब की शुरुआत में आप दे दी अनुसरण किया है, यह याद आ रही सुविधा इस बीच 75 वोट प्राप्त हुआ है और अब implemented by Microsoft in EF 6.1 है (अंत में!)। उन सभी लोगों के लिए जिन्होंने भाग लिया: वोटिंग के लिए धन्यवाद! आपकी आवाज सुनी गई थी।
उदाहरण के लिए:
DECLARE @p0 NVarChar(1000) = '1'
SELECT [t0].[EmployeeID], [t0].[LastName], [t0].[FirstName], [t0].[Title],
[t0].[TitleOfCourtesy], [t0].[BirthDate], [t0].[HireDate], [t0].[Address],[t0].[City],
[t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[HomePhone], [t0].[Extension],
[t0].[Photo], [t0].[Notes], [t0].[ReportsTo], [t0].[PhotoPath]
FROM [Employees] AS [t0]
WHERE (CONVERT(NVarChar,[t0].[EmployeeID])) = @p0
अर्थात e.EmployeeID.ToString()
(CONVERT(NVarChar,[t0].[EmployeeID]))
करने के लिए अनुवाद:
var query = from e in context.Employees where e.EmployeeID.ToString() == "1" select e;
अब अनुवाद किया जाएगा।
क्रमांक एक स्ट्रिंग पहले से ही है? निश्चित नहीं है कि इससे ईएफ को कोई समस्या क्यों होगी, लेकिन त्रुटि संदेश यह इंगित करता है कि यह ठोकर खा रहा है। आप चीज स्ट्रिंग करेंगे। ToString() बहुत तेज़ी से काम करेगा: पी –
आईडी एल 2 एस उदाहरण में एक पूर्णांक है। हमारे असली ईएफ उदाहरण में यह एक GUID है। दिलचस्प है ToString() इंटेलिजेंस में है और यह संकलित करता है लेकिन उस रनटाइम त्रुटि को प्राप्त करता है। –
@Edward Tanguay: मैं बस अपने questione देखा और एक जवाब जोड़ दिया है, मुझे आशा है कि यह अभी भी इस तरह के एक लंबे समय के बाद भी उपयोगी है ... – Matt