2011-11-03 10 views
7

पर कोई समर्थित अनुवाद नहीं है क्या किसी को इस फ़ंक्शन को LINQ से SQL तक समर्थित करने का सुझाव है?विधि X के पास SQL ​​- बूलियन और डेटाटाइम

public bool IsEnabled() 
{ 
    return !this.Disabled && 
      ((!this.EnabledFrom.HasValue || this.EnabledFrom < DateTime.Now) && 
      (!this.EnabledTo.HasValue || this.EnabledTo > DateTime.Now)); 
} 

अक्षम एक बूल, सक्षम फ्रॉम और सक्षम है डेटटाइम है? और सभी डेटाबेस फ़ील्ड।

+1

वहाँ कोड आप से पता चला है में किसी भी LINQ होने के लिए प्रकट नहीं होता। मुझे संदेह है कि यह कोड आपकी त्रुटि का कारण बन रहा है। – BlueMonkMN

+2

IsEnabled का उपयोग कर क्वेरी (इसका हिस्सा) का उदाहरण; क्वेरी = क्वेरी। जहां (a => a.PageMeta.Hidden ==! दृश्यमान &&.PageMeta.IsEnabled() == दृश्यमान); – Eilev

+1

समस्या यह है कि यह SQL में IsEnabled को खोजने का प्रयास करता है। तर्क को IsEnabled से सीधे linq क्वेरी पर ले जाएं। – Beku

उत्तर

6

अपनी IsEnabled विधि एक अभिव्यक्ति वापस करें।

यहाँ देखें: http://www.atrevido.net/blog/2007/09/05/Calling+Custom+Methods+In+LINQtoSQL.aspx

कुछ नीचे (untested) की तरह:

static Expression<Func<Account, bool>> IsEnabled = a => 
    !a.Disabled && 
    ((!a.EnabledFrom.HasValue || a.EnabledFrom < DateTime.Now) && 
    (!a.EnabledTo.HasValue || a.EnabledTo > DateTime.Now)); 
+0

बहुत अच्छा लग रहा है! लेकिन क्या आप जानते हैं कि मैं EntityRef के माध्यम से IsEnabled तक कैसे पहुंच सकता हूं: .Where (a => a.Account.IsEnabled) <- यह – Eilev

+0

'काम नहीं करता है। जहां (IsEnabled) ' –

+0

है। क्वेरी में ऑब्जेक्ट पर निष्पादित होगा , लेकिन "खाता" वस्तुओं पर एक EntityRef है। यह काम करेगा: query.Select (a => a.Account)। जहां (IsEnabled) है - लेकिन फिर मुझे केवल बदले में खाते मिलते हैं, मुझे मूल ऑब्जेक्ट्स – Eilev