2009-06-10 13 views
5

Sto cercando di verificare se una data è questa data o più grande all'interno della mia query linq con booleano. Ma non funziona come voglio io.Controlla se data è questa data o più grande

Questo mio codice

 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(); 
    } 

Chiunque nows un modo differente?

+0

la parte più grande del vostro problema, ma CheckMonth può essere scritto public bool CheckMonth (int mese) { mese di ritorno> = System.DateTime.Now.Month; } –

+0

Sarebbe utile sapere cosa sta facendo e cosa vuoi che faccia? È un'eccezione? Valore sbagliato? – bytebender

risposta

24

Che cosa vuoi fare? Secondo il tuo testo, vuoi scoprire se una determinata data è oggi o più tardi, ma il codice di esempio confronta solo il mese (il che significa che giugno di quest'anno è lo stesso di giugno dell'anno scorso). Se si desidera confrontare la data (compreso l'anno e il giorno), questo confronto farà il lavoro per voi:

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

Puoi migliorare la leggibilità usando DateTime.Today –

0

Qual è il provider qui? LINQ to SQL? Oggetti? Entity Framework? (dal nome, sembra LINQ-to-SQL ...)

Infatti, i provider di database non saranno in grado di elaborare il metodo; avete alcune opzioni:

  • linea è: && d.EndDate.Month >= System.DateTime.Now.Month
  • mappa ad un'UDF (LINQ to SQL solo) che accetta un DateTime

Il primo è probabilmente più facile ... se si hanno problemi con esso, non riconoscendo System.DateTime.Now.Month, quindi farlo prima in una variabile.

+0

Linq-to-Sql è che io uso –

0

Questo è solo il controllo che il mese è maggiore del mese corrente, quindi il 4 luglio 1776 passerebbe. Immagino tu voglia controllare l'intera data? Fare questo:

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); 

Un paio di altri punti:

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

è la stessa: mesi Ritorno> = System.DateTime.Now;

Direi quasi la stessa cosa, dato che chiamate due volte DateTime.Ora due volte e potreste finire con valori separati. Chiama DateTime.Ora una volta e inseriscilo in una variabile per assicurarti di controllare costantemente la stessa ora.

Problemi correlati