2009-05-23 9 views
0
query = query.Where(q => q.Date.ToString().Contains(strDate)); 

L'instruction ci-dessus n'est pas correcte.Comment filtrer la requête LINQ par date?

Si j'utilise "==" Ensuite, il correspond à la date exacte. C'est O.K. mais puis-je filtrer, comme nous filtrons les chaînes ??

Répondre

3

Je ne comprends pas vraiment ce que vous entendez par "filtre".

Vous pouvez faire des choses comme:

query = query.Where(q => q.Date.Year.Equals(myDate.Year)); 

ou

query = query.Where(q => q.Date.Day.Equals(myDate.Day)); 

si c'est ce que vous êtes après.

Bien sûr, vous devez convertir strDate en DateTime. Si vous ne voulez vraiment pas faire cela, vous pouvez également jeter la date de DB à une chaîne du même format:

query = query.Where(q => q.Date.ToString("dd-MM-yyyy").Contains(strDate)); 
0

En supposant que q.Date est une instance de DateTime, je ne pense pas que la conversion une instance DateTime dans une chaîne est le meilleur moyen de comparer des dates. Il serait beaucoup plus fiable de filtrer le DateTime en fonction des propriétés de l'objet. Par exemple, Année, Mois, etc.

Par exemple, si vous souhaitez filtrer l'année dans strDate, vous pouvez procéder comme suit.

var d = DateTime.Parse(strDate); 
query = query.Where(q => q.Date.Year == d.Year); 

Pouvez-vous nous donner plus de contexte en détaillant ce type de valeurs strDate contiendrait cette façon, nous pouvons savoir ce que vous voulez filtrer contre.

0

Si vous êtes sûr de la chaîne que vous obtiendrez dans votre recherche, vous pouvez toujours faire un contenant spécifique à votre région.

(((q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).Value.Day.ToString()) + "/" + ((q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).Value.Month.ToString()) + "/" + ((q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).Value.Year.ToString())).ToString().Contains(strDate) || (q.Date == null ? DateTime.Parse("01/01/1900") : q.Date).ToString().Contains(strDate)) 

qui produirait un match pour la chaîne d/m/yyyy recherché à la date par exemple. Ce n'est pas idéal pour la recherche publique, mais c'est mieux qu'un simple .ToString().Contains().

Questions connexes