2008-10-14 6 views
26

अगर मैं एक LinqSQL इस तरह अभिव्यक्ति के लिए है:मैं एसक्यूएल के GETDATE() और DATEADD() को लिंक से SQL अभिव्यक्ति में कैसे उपयोग करूं?

from subscription in dbContext.Subscriptions 
where subscription.Expires > DateTime.Now 
select subscription 

मैं इस C# कार्यक्रम चलाने मशीन के समय के बजाय एसक्यूएल सर्वर GETDATE() समारोह का उपयोग करने के लिए चाहते हैं।

DATEADD(dd, 2, GETDATE()) 

उत्तर

43

this का प्रयास करें:

[Function(Name="GetDate", IsComposable=true)] 
public DateTime GetSystemDate() 
{ 
    MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo; 
    return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue; 
} 

संपादित करें: इसे आपके डेटा कॉन्टेक्स्ट क्लास का हिस्सा होना चाहिए।

अब आप डेटटाइम के बजाय GetSystemDate() का उपयोग कर सकते हैं.अब अपने प्रश्नों में। डेट मतभेदों के लिए System.Data.Linq.SqlClient नामस्थान पर विशेष रूप से देखें, विशेष रूप से SqlMethods वर्ग के DayDiffXXX फ़ंक्शन।

+1

नोट: यह सीधे GETDATE() फ़ंक्शन में अनुवादित हो जाता है, उदा। एसक्यूएल सर्वर के लिए कोई अलग कॉल नहीं। बस इसे सत्यापित किया। – liggett78

+0

प्रतिभा! अच्छा समाधान और बहुत सराहना की। –

+1

MethodInfo सिस्टम है। Reflection.MethodInfo और फ़ंक्शन System.Data.Linq.Mapping.Function – Trisped

0

आप ExecuteQuery इस्तेमाल कर सकते हैं एसक्यूएल http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx

मुझे पता है का पूरा नियंत्रण हासिल करने के लिए:

DateTime.Now.AddDays(2) 
इस के लिए

:

अगला प्रश्न यह कैसे अनुवाद करने के लिए किया जाएगा हालांकि यह ADO.NET पर बहुत कम लाभ (या शायद उल्लंघन पर) जैसा लगता है। ExecuteQuery उपयोग एक ही स्थान पर इस तरह के आंकड़ों के संदर्भ में की तारीख पाने के लिए:

public partial class YourDataContext 
{ 
    public DateTime GetDate() 
    { 
    return ExecuteQuery<DateTime>("SELECT GETDATE()").First(); 
    } 
} 

और फिर आप

+0

अच्छा ... तो यह एक LINQ अभिव्यक्ति नहीं है ;-) –

+0

सच :) लेकिन यदि linq2sql को SQL पर एक अमूर्त माना जाता है तो आपको पहले स्थान पर एक एसक्यूएल फ़ंक्शन का उपयोग करने में सक्षम नहीं होना चाहिए? : पी –

6

आप हर बार इस्तेमाल करने से पहले डेटाबेस क्वेरी करने से परहेज नहीं करते हैं, तो मैं निम्नलिखित तरीके को सुझाव है कि लिख सकते हैं

from subscription in dbContext.Subscriptions 
where subscription > dbContext.GetDate().AddDays(2) 
select subscription 
संबंधित मुद्दे