27 Stimmen

Wie verwende ich die SQL-Funktionen GETDATE() und DATEADD() in einem Linq to SQL-Ausdruck?

Wenn ich eine Linq a SQL Ausdrücke wie dieser:

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

Ich möchte, dass dies die SQL-Server verwendet GETDATE() Funktion anstelle der Zeit des Rechners, auf dem die C# Programm.

Die nächste Frage wäre, wie dies zu übersetzen wäre:

DateTime.Now.AddDays(2)

dazu:

DATEADD(dd, 2, GETDATE())

43voto

liggett78 Punkte 11178

Pruebe este :

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

EDITAR : Dies muss ein Teil Ihrer DataContext-Klasse sein.

Jetzt können Sie GetSystemDate() anstelle von DateTime.Now in Ihren Abfragen verwenden. Was die Datumsunterschiede betrifft, schauen Sie sich den System.Data.Linq.SqlClient-Namensraum an, insbesondere die DayDiffXXX-Funktionen der SqlMethods-Klasse.

7voto

Panos Punkte 18703

Wenn es Ihnen nichts ausmacht, die Datenbank vor jeder Verwendung abzufragen, würde ich folgende Abhilfe vorschlagen: Verwenden Sie ExecuteQuery an einer Stelle, um das Datum im Datenkontext wie folgt zu erhalten:

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

und dann können Sie schreiben

from subscription in dbContext.Subscriptions
where subscription > dbContext.GetDate().AddDays(2)
select subscription

0voto

Sie könnten die ExecuteQuery verwenden, um die volle Kontrolle über die Sql zu erhalten http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx

Ich weiß, es scheint wie sehr wenig Gewinn (oder vielleicht auf das contrairy) über ADO.NET obwohl.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X