दिलचस्प पोस्ट
विभिन्न प्रक्रियाओं के बीच फाइल डिस्क्रिप्टर को पास करने का पोर्टेबल तरीका थर्डज के साथ ऑब्जेक्ट के zOrder को कैसे बदल सकता है? Django Push उपयोगकर्ताओं को HTTP प्रतिक्रिया शरीर के चारों ओर मार्जिन स्थान कैसे हटाएं या डिफ़ॉल्ट सीएसएस शैलियों को साफ़ करें क्लिक करने पर छवि फ़ाइलों को डाउनलोड करने के लिए ब्राउज़र को बल दें मेरी iPhone ऐप में तिथि करने के लिए स्ट्रिंग कन्वर्ट एंड्रॉइड: ScrollView स्क्रॉलिंग बंद हो जाता है जब पता लगाएं निर्धारित मानदंड कैसे करें एंड्रॉइड एसडीके मैनेजर नहीं स्थापित अवयव जब कोई दृश्य खुले / दिखाया जाता है तो एक नियंत्रक समारोह चलाएं मैं कैसे जांच करूं अगर स्ट्रिंग में स्विफ्ट में कोई अन्य स्ट्रिंग है? गतिशील रूप से एक सामान्य प्रकार के उदाहरण की घोषणा जावास्क्रिप्ट तिथि ऑब्जेक्ट हमेशा एक दिन बंद? आप किसी सदस्य फ़ंक्शन पॉइंटर को कैसे पारित करते हैं? क्लासनोटफ़ाउंड अपवाद: org.slf4j.LoggerFactory

क्यों इकाईयों को LINQ विधि 'System.String toString () पहचान नहीं है?

MVC3 वेब अनुप्रयोग के अंदर त्रुटि हो रही है LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

जब मैं क्वेरी से ईएफ का उपयोग करके मूल्यों को प्राप्त करने की कोशिश करता हूं:

 public class DataRepository { public mydataEntities1 dbContext = new mydataEntities1(); public List<SelectListItem> GetPricingSecurityID() { var pricingSecurityID = (from m in dbContext.Reporting_DailyNAV_Pricing select new SelectListItem { Text = m.PricingSecurityID.ToString(), Value = m.PricingSecurityID.ToString() }); return pricingSecurityID.ToList(); } } 

Solutions Collecting From Web of "क्यों इकाईयों को LINQ विधि 'System.String toString () पहचान नहीं है?"

इसे एसक्यूएल में परिवर्तित नहीं किया जा सकता है मुझे लगता है, सिद्धांत रूप में, यह संभवतः कार्यान्वित नहीं है, लेकिन

अपने परिणामों के बाद आपको बस अपना प्रक्षेपण करना होगा:

 var pricingSecurityID = (from m in dbContext.Reporting_DailyNAV_Pricing select m.PricingSecurityID).AsEnumerable() .Select(x => new SelectListItem{ Text = x.ToString(), Value = x.ToString() }); 

यदि यह पहले से ही एक स्ट्रिंग है, तो आप पहली जगह में ToString को कॉल करने के लिए परेशान क्यों कर रहे हैं? मुझे संदेह है कि अनुवाद को LINQ में इकाईयों में शामिल नहीं किया गया था क्योंकि यह व्यर्थ है अपने चयन खंड को इसमें बदलें:

 select new SelectListItem { Text = m.PricingSecurityID, Value = m.PricingSecurityID } 

यदि आपको वास्तव में कुछ ऐसा करने की आवश्यकता है जो LINQ को AsEnumerable द्वारा समर्थित नहीं है, तो एक डेटाबेस क्वेरी से इन-प्रोसेस में संक्रमण के लिए AsEnumerable का उपयोग करें:

 public List<SelectListItem> GetPricingSecurityID() { return dbContext.Reporting_DailyNAV_Pricing .Select(m => m.PricingSecurityID) .AsEnumerable() // Rest of query is local // Add calls to ToString() if you really need them... .Select(id => new SelectListItem { Text = id, Value = id }) .ToList(); } 

मैं जेसन के आपत्तियों से भी सहमत हूं, बीटीडब्ल्यू आप एक List<string> लौटने के लिए बेहतर होगा, जो कहीं और गाया जाता है।

यह भी ध्यान रखें कि यदि आप केवल एक ही select धारा का उपयोग करने जा रहे हैं या सिर्फ where एक खंड, क्वेरी अभिव्यक्तियाँ वास्तव में ज्यादा नहीं जोड़ते हैं – LINQ एक्सटेंशन विधियों को बुलाते हुए कम अव्यवस्था के साथ समाप्त हो सकता है, खासकर यदि आप विधियों को कॉल करना चाहते हैं क्वेरी अभिव्यक्ति (जैसे ToList ) में समर्थित नहीं हैं

क्योंकि यह एसक्यूएल को बदलने की कोशिश कर रहा है, और यह नहीं कर सकता। कॉल को ToString छोड़ दें, और कॉलर पर वापस आने से पहले एक प्रोजेक्शन करें। इसलिए, अपने select खंड को प्रतिस्थापित करें

 select m.PricingSecurityID 

और फिर कहते हैं

 return pricingSecurityID .AsEnumerable() .Select(x => x.ToString()) .Select(x => new SelectListItem { Text = x, Value = x }) .ToList(); 

इसके अलावा, मुझे लगता है कि आप चिंताओं को लेकर चिंतित हैं और डेटा को लेकर चिंतित हैं। यह आम तौर पर एक खराब अभ्यास है वास्तव में, आपको आईडी की सूची वापस करना चाहिए और अपने कोड के UI भाग को इसे सही रूप में अंतिम रूप देने के बारे में चिंता करें।

इस बारे में कैसा है। इस उदाहरण में, डीबी और कौशल फ़ील्ड में वीडीएन दोनों फ़ील्ड पूर्णांक हैं। मैं दोनों क्षेत्रों से मैचों की तलाश कर रहा हूं, इसलिए मेरे पास 2 की तुलना है।

इसमें शामिल करें:

 using System.Data.Objects.SqlClient; // needed to convert numbers to strings for linq 

संख्याओं की तुलना करते समय यह करते हैं:

  // Search Code if (!String.IsNullOrEmpty(searchString)) { depts = depts.Where(d => SqlFunctions.StringConvert((double)d.VDN).Contains(searchString.ToUpper()) || SqlFunctions.StringConvert((double)d.Skill).Contains(searchString.ToUpper())); } // End Search Code 

Workie।

दुर्भाग्य से ईएफ पता नहीं कैसे परिवर्तित करें। टॉस्ट्रिंग () आपको एंबेडेड फ़ंक्शन SqlFunctions.StringConvert का उपयोग करना चाहिए: http://msdn.microsoft.com/en-us/library/dd466292.aspx इसके अलावा कोई भी अधिभार इंट्रेट के लिए नहीं है ताकि आपको चाहिए टाइपकास्ट टू डबल 🙁

 var vendors = from v in Vendors select new { Code = SqlFunctions.StringConvert((double)v.VendorId) }; 

मैं समझता हूं कि इस प्रश्न का उत्तर दिया गया है और मैं सहमत हूं कि AsEnumerable() का उपयोग करने का तरीका है। हालांकि मैं एक सामान्य परिदृश्य को हाइलाइट करना चाहूंगा जो कि मैं आम तौर पर वहां AsEnumerable() जहां इस त्रुटि को हल करने के लिए AsEnumerable() का प्रयोग किया जाता है

संबंधित डेटा के लिए .NET भाषा-एकीकृत क्वेरी से

ToList () और ToArray () के विपरीत, AsEnumerable () ऑपरेटर, क्वेरी के निष्पादन का कारण नहीं है। यह अभी भी स्थगित है AsEnumerable () ऑपरेटर केवल क्वेरी के स्थैतिक टाइपिंग को बदलता है, IQueryable को एक IEnumerable में बदल कर, कम्पाइलर को स्थानीय रूप से निष्पादित की जाने वाली क्वेरी का इलाज करने के लिए चकरा देनेवाला।

संदर्भ

  1. क्या मैं LINQ से SQL को गलत समझ रहा हूँ।
  2. समझना। LINQ से एसक्यूएल में एएनएनमेरेबल ()

अक्षम तरीके से

 IEnumerable<InvoiceDTO> inefficientEnumerable = (from a in db.Invoices where a.Practice_Key == practiceKey.FirstOrDefault() select a ).AsEnumerable(). Select(x => new InvoiceDTO { InvoiceID = x.InvoiceID, PracticeShortName = x.Dim_Practice.Short_Name, InvoiceDate = x.InvoiceDate, InvoiceTotal = x.InvoiceAmount, IsApproved = x.IsApproved, InvoiceStatus = ( x.IsApproved == null ? "Pending" : x.IsApproved == true ? "Approved" : x.IsApproved == false ? "Rejected" : "Unknown" ), InvoicePeriodStartDateText = x.InvoicePeriodStart.ToShortDateString(), InvoicePeriodEndDateText = x.InvoicePeriodEnd.ToShortDateString(), InvoicePeriodStartDate = x.InvoicePeriodStart, InvoicePeriodEndDate = x.InvoicePeriodEnd } ); invoices = inefficientEnumerable.ToList(); 

यहां संपूर्ण टेबल के लिए AsEnumerable योग्य उपयोग किया जाता है। सभी कॉलम चुनने वाले कार्यक्रम हो रहे हैं, जिनकी जरूरत नहीं है।

बेहतर तरीका

  IQueryable<InvoiceDTO> invoicesQuery = (from a in db.Invoices where a.Practice_Key == practiceKey.FirstOrDefault() select new InvoiceDTO { InvoiceID = a.InvoiceID, PracticeShortName = a.Dim_Practice.Short_Name, InvoiceDate = a.InvoiceDate, InvoiceTotal = a.InvoiceAmount, IsApproved = a.IsApproved, InvoiceStatus = ( a.IsApproved == null ? "Pending" : a.IsApproved == true ? "Approved" : a.IsApproved == false ? "Rejected" :"Unknown" ), InvoicePeriodStartDate = a.InvoicePeriodStart, InvoicePeriodEndDate = a.InvoicePeriodEnd }); IEnumerable<InvoiceDTO> betterEnumerable = invoicesQuery.AsEnumerable(). Select(x => new InvoiceDTO { InvoiceID = x.InvoiceID, PracticeShortName = x.PracticeShortName, InvoiceDate = x.InvoiceDate, InvoiceTotal = x.InvoiceTotal, IsApproved = x.IsApproved, InvoiceStatus = x.InvoiceStatus, InvoicePeriodStartDateText = x.InvoicePeriodStartDate.ToShortDateString(), InvoicePeriodEndDateText = x.InvoicePeriodEndDate.ToShortDateString(), InvoicePeriodStartDate = x.InvoicePeriodStartDate, InvoicePeriodEndDate = x.InvoicePeriodEndDate } ); 
 return dbContext.Reporting_DailyNAV_Pricing.AsEnumerable().Select(x => new SelectListItem { Text = x.PricingSecurityID.ToString(), Value = x.PricingSecurityID.ToString() }).ToList();