2009-06-10 18 views
5

J'essaie de vérifier si une date est cette date ou plus grande dans ma requête linq avec booléen. Mais ça ne marche pas comme je le veux.Vérifiez si la date est cette date ou plus grande

mon code Ce

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

Tous ceux qui nows une façon diffrent?

+0

pas la plus grande partie de votre problème, mais CheckMonth peut être écrit public bool CheckMonth (mois int { mois de retour> = System.DateTime.Now.Month; } –

+0

Il serait utile de savoir ce qu'il fait et ce que vous voulez qu'il fasse? Est-ce qu'il lance une exception? Mauvaise valeur? – bytebender

Répondre

24

Qu'est-ce que vous voulez faire? Selon votre texte, vous voulez savoir si une date donnée est aujourd'hui ou plus tard, mais l'exemple de code ne compare que le mois (ce qui signifie que Juin cette année est la même que Juin l'année dernière). Si vous voulez comparer la date (y compris l'année et le jour), cette comparaison fera le travail pour vous:

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

Vous pouvez améliorer la lisibilité en utilisant DateTime.Today –

0

Quel est le fournisseur ici? LINQ-to-SQL? Objets? Cadre d'entité? (du nom, il ressemble à LINQ-to-SQL ...)

En effet, les fournisseurs de bases de données ne seront pas en mesure de traiter votre méthode; vous avez quelques options:

  • inline il: && d.EndDate.Month >= System.DateTime.Now.Month
  • carte
  • à une UDF (LINQ to SQL uniquement) qui accepte un DateTime

Le premier est sans doute plus facile ... Si vous rencontrez des problèmes avec le système, vous ne reconnaissez pas System.DateTime.Now.Month, alors faites-le d'abord dans une variable.

+0

Linq-to-Sql est que j'utilise –

0

Ceci vérifie seulement que le mois est supérieur au mois courant, donc le 4 juillet 1776 passera. Je suppose que vous voulez vérifier la date complète? Pour ce faire:

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

Quelques autres points:

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

est le même que: mois de retour> = System.DateTime.Now; Je devrais dire presque la même chose, puisque vous appelez indistinctement deux fois DateTime.Now, et vous pourriez vous retrouver avec des valeurs séparées. Appelez DateTime.Now une fois et placez-le dans une variable pour vous assurer que vous vérifiez constamment la même heure.

Questions connexes