2009-06-10 22 views
5

Ich versuche zu überprüfen, ob ein Datum dieses Datum oder größer in meiner Linq-Abfrage mit Boolean ist. Aber es funktioniert nicht wie ich will.Überprüfen Sie, ob das Datum dieses Datum oder größer ist

Das ist mein Code

 public bool CheckMonth(int month) 
    { 
      if (month > System.DateTime.Now.Month) 
      { 
       return true; 
      } 
      else if (month == System.DateTime.Now.Month) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
    } 

    public virtual IList<DateItem> GetThreeDateToList() 
    { 
     var data = new ScoutDataDataContext(); 

     var q = (from d in data.DateDetails 
       where d.Activate == 1 && CheckMonth(d.EndDate.Month) 
       orderby d.Date.Date.Month descending 
       select new DateItem 
       { 
        Title = d.Title, 
        Date = d.Date.Date + " - " + d.EndDate.Date, 
        Link = d.Link, 
       }).Take(3); 

     return q.ToList(); 
    } 

Wer einen diffrent Weg nows?

+0

nicht den größten Teil des Problems, sondern CheckMonth kann public bool CheckMonth (int Monat geschrieben werden) { Rückkehrmonat> = System.DateTime.Now.Month; } –

+0

Es wäre hilfreich zu wissen, was es tut und was es tun soll? Ist es eine Ausnahme? Falscher Wert? – bytebender

Antwort

24

Was möchten Sie tun? Laut Ihrem Text möchten Sie herausfinden, ob ein bestimmtes Datum heute oder später ist, aber das Codebeispiel vergleicht nur den Monat (was bedeutet, dass Juni dieses Jahres dasselbe wie Juni letzten Jahres ist). Wenn Sie das Datum (einschließlich Jahr und Tag) vergleichen wollen, wird dieser Vergleich den Job für Sie:

yourDate.Date >= DateTime.Now.Date 
+1

verwenden Sie können die Lesbarkeit mithilfe von DateTime.Today verbessern –

0

Was ist der Anbieter hier? LINQ-zu-SQL? Objekte? Entitätsrahmen? (aus dem Namen, es sieht aus wie LINQ-to-SQL ...)

In der Tat werden Datenbankanbieter nicht in der Lage, Ihre Methode zu verarbeiten; Sie haben ein paar Optionen:

  • inline es: && d.EndDate.Month >= System.DateTime.Now.Month
  • Karte, um diese zu einem UDF (LINQ to SQL nur), die akzeptiert eine DateTime

Die erste ist wahrscheinlich einfacher ... Wenn Sie Probleme damit haben, System.DateTime.Now.Month nicht zu erkennen, dann tun Sie das zuerst in einer Variablen.

+0

Linq-zu-Sql ist, dass ich –

0

Dies prüft nur, ob der Monat größer ist als der aktuelle Monat, also würde der 4. Juli 1776 passieren. Ich nehme an, Sie möchten das gesamte Datum überprüfen? Tun Sie dies:

var q = (from d in data.DateDetails 
      where d.Activate == 1 && d.EndDate > DateTime.Now) 
      orderby d.Date.Date.Month descending 
      select new DateItem 
      { 
       Title = d.Title, 
       Date = d.Date.Date + " - " + d.EndDate.Date, 
       Link = d.Link, 
      }).Take(3); 

Ein paar andere Punkte:

 if (month < System.DateTime.Now.Month) 
     { 
      return true; 
     } 
     else if (month == System.DateTime.Now.Month) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

ist das gleiche wie: return Monat> = System.DateTime.Now;

Ich sollte sagen, fast das gleiche, da Sie DateTime.Now zweimal aufrufen, und Sie können mit separaten Werten enden. Rufen Sie DateTime.Now einmal auf und legen Sie sie in eine Variable, um sicherzustellen, dass Sie die gleiche Zeit konsistent überprüfen.

Verwandte Themen