ध्यान दें कि _src IQueryable<U>
का उत्तराधिकारी है और वी new()
का उत्तराधिकारी है;सी # लिंक चुनिंदा विधि में समस्या का चयन करें
मैंने निम्नलिखित कथन लिखा, कोई वाक्यविन्यास त्रुटि नहीं है।
IQueryable<V> a = from s in _src where (s.Right - 1 == s.Left) select new V();
लेकिन अगर मुझे फिर से लिखा है यह इस प्रकार है, दृश्य स्टूडियो संपादक में "चुनें" एक त्रुटि की शिकायत
IQueryable<V> d = _src.Where(s => s.Right - 1 == s.Left).Select(s=> new V());
त्रुटि है:
The type arguments cannot be inferred from the usage. Try specifying the type arguments explicitly.
Candidates are:
System.Collections.Generic.IEnumerable<V> Select<U,V>(this System.Collections.Generic.IEnumerable<U>, System.Func<U,V>) (in class Enumerable)
System.Linq.IQueryable<V> Select<U,V>(this System.Linq.IQueryable<U>, System.Linq.Expressions.Expression<System.Func<U,V>>) (in class Queryable)
किसी को समझा सकते हैं इस घटना, और त्रुटि को ठीक करने का समाधान क्या है?
=== संपादित करें (2010-03-16 5:35 बजे) ===
धन्यवाद माइक दो। मैंने आपके जैसे एक साधारण उदाहरण की भी कोशिश की। यह काम करता है लेकिन यह मेरे में नहीं करता है। मैंने कोड को निम्नानुसार पोस्ट किया:
public class NSM<U, V> where U : IQueryable<U> where V : new()
{
private U _src;
public NSM(U source) { _src = source; }
public IQueryable<V> LeafNodes
{
get
{
return from s in _src where (s.Right - 1 == s.Left) select new V();
}
}
}
मैं चाहता हूं कि LeafNodes फ़ंक्शन को linq विधि श्रृंखला विधि में फिर से लिखा जाए। कोई उपाय?
धन्यवाद आवंटित करने के लिए। पहले के बराबर बयान क्या है? – Gnought
आपके द्वारा जो कोड जोड़ा गया है वह तब तक संकलित नहीं होगा जब तक कि यू कुछ ऐसा न हो जिसमें दाएं और बाएं संपत्ति हों। इसलिए यह केवल 'IQueryable ' नहीं हो सकता है जब तक कि वहां 'यू: ILeftRight' या कुछ नहीं है। –
मैंने इसे आपके अद्यतन नमूने के लिए धन्यवाद दिया। नीचे अद्यतन उत्तर देखें। अधिक जानकारी प्रदान करने के लिए धन्यवाद। –