2009-06-10 7 views
5

Estoy tratando de verificar si una fecha es esta o más grande dentro de mi consulta linq con boolean. Pero no está funcionando como yo quiero.Verificar si la fecha es esta o más grande

Esta mi código

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

Cualquiera que nows una manera diversa?

+0

la mayor parte de su problema, pero CheckMonth puede ser escrita CheckMonth public bool (int mes) { mes de devolución> = System.DateTime.Now.Month; } –

+0

Sería útil saber qué está haciendo y qué quiere que haga. ¿Está arrojando una excepción? ¿Valor incorrecto? – bytebender

Respuesta

24

¿Qué es lo que quieres hacer? De acuerdo con su texto, desea saber si una fecha dada es hoy o más tarde, pero la muestra del código compara solo el mes (lo que significa que junio de este año es igual a junio del año pasado). Si desea comparar la fecha (incluyendo el año y día), esta comparación puede hacer el trabajo para usted:

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

Puede mejorar la legibilidad utilizando DateTime.Today –

0

¿Cuál es el proveedor aquí? LINQ-to-SQL? ¿Objetos? ¿Marco de la entidad? (del nombre, parece LINQ-a-SQL ...)

De hecho, los proveedores de bases de datos no podrán procesar su método; usted tiene algunas opciones:

  • línea que: && d.EndDate.Month >= System.DateTime.Now.Month
  • mapa a una UDF (LINQ a SQL solamente) que acepta un DateTime

La primera es probablemente más fácil ... si tiene problemas al no reconocer System.DateTime.Now.Month, entonces hágalo primero en una variable.

+0

Linq-to-Sql es que uso –

0

Esto solo está comprobando que el mes es mayor que el mes actual, por lo que el 4 de julio de 1776 pasará. Supongo que quieres verificar la fecha completa? Haga lo siguiente:

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 par de otros puntos:

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

es lo mismo que: meses de retorno> = System.DateTime.Now;

Debo decir casi lo mismo, ya que está llamando innecesariamente a DateTime.Now dos veces, y es posible que termine con valores separados. Llame a DateTime.Now una vez y colóquelo en una variable para asegurarse de que está comprobando constantemente al mismo tiempo.

Cuestiones relacionadas