मैं इस पुस्तक में Redgate ftp://support.red-gate.com/ebooks/under-the-hood-of-net-memory-management-part1.pdfक्या कॉल के भीतर नामित विधि को कॉल करना संभव है?
से इस नि: शुल्क ई-पुस्तक से Linq के कुछ प्रदर्शन निहितार्थ को समझने के लिए पेज 157-158 पर कोशिश कर रहा हूँ, वे उदाहरण निम्नलिखित बनाया।
Order[] pastDueAccounts = null;
DateTimedueDate = DateTime.Today.AddDays(-7);
using(varcontext = new Context())
{
pastDueAccounts = context.Accounts.Where(account => account.DueDate < dueDate).ToArray();
}
वे तो समारोह निम्नलिखित में फिर से शामिल होती lamda अभिव्यक्ति का हिस्सा है।
public bool PastDueAccount(Account account)
{
return account.DueDate < DateTime.Today.AddDays(-7);
}
अंततः उन्होंने इस कार्य को निम्नानुसार उपयोग किया।
Order[] pastDueAccounts = null;
using(varcontext = new Context())
{
pastDueAccounts = context.Accounts.Where(account => PastDueAccount(account)).ToArray();
}
के आधार पर मैं क्या शोध अब तक, LINQ के रूप में अपनी इस LINQ क्वेरी चलाने के लिए संभव नहीं विधि की पहचान नहीं कर सकेंगे और एक दुकान अभिव्यक्ति में अनुवाद कर जा सकता है। मुझे आश्चर्य है कि क्या यह उदाहरण गलत है और चलाने के लिए संभव नहीं है या अगर मुझे इस समस्या को अनुकरण करने के तरीके के बारे में सुनाई देने में मुश्किल हो रही है?
यह गलत है, और काम नहीं करेगा, क्योंकि यह लैम्ब्डा-अभिव्यक्ति नहीं है और क्वेरी प्रदाता द्वारा मूल्यांकन नहीं किया जा सकता है। – casperOne
मुझे सचमुच यह एक ईएफ सेटअप के खिलाफ काम कर रहा है। – Gromer
यदि यह काम कर रहा है, तो आप * क्लाइंट * पर फ़िल्टर कर रहे हैं और 'कहां' को 'IENumerable' से परिणामों का मूल्यांकन कर रहा है और * नहीं * सर्वर को तरफ फ़िल्टर का अनुवाद कर रहा है। याद रखें, 'IQueryable ' 'IENumerable ' से प्राप्त होता है, इसलिए 'IENumerable ' पर सभी एक्सटेंशन विधियां 'IQueryable 'पर काम करेंगी और यह हमेशा स्पष्ट नहीं है कि संक्रमण कब होता है। –
casperOne