2009-08-20 7 views
0

J'ai le problème suivant: dans une table de base de données, les ventes sont enregistrées. L'un des champs est le SaleDate qui est un type SQL Server Date. Le site Web permet maintenant de rechercher dans ce champ. Et cela permet de rechercher uniquement l'année.Vérifiez la date avec Linq-to-SQL

Supposons qu'il existe un enregistrement avec la date 2008/11/01. Si je recherche "2008" l'entrée est retournée, ce qui est bien sûr correct. Mais la recherche de "2008/11/01" ne retournera pas l'entrée.

Alors, voici mon code:

filteredSales = filteredSales.Where(s => s.SaleDate.ToString().Contains(searchterm)); 

I have also tried this ones: 
filteredSales = filteredSales.Where(s => s.SaleDate.Value.ToString().Contains(searchterm)); 
filteredSales = filteredSales.Where(s => s.SaleDate.Value.ToShortDateString().Contains(searchterm)); 

Ils ne fonctionnent pas.

Peut-être que ce n'est pas un problème LinQ du tout mais plus de la culture puisque c'est une application allemande et le terme de recherche est vraiment "01.11.2008". Mais quand je publie la valeur de la base de données ou même regarde directement la base de données, elle est affichée à "01.11.2008".

Merci pour votre aide.

Michael

Voici la solution complète basée sur la réponse choisie ci-dessous:

try 
{ 
    DateTime sdt = DateTime.Parse(suchbegriff, new System.Globalization.CultureInfo("de-DE")); 
    filteredSales = filteredSales.Where(s => s.SaleDate.Value == sdt); 
} 
catch (FormatException e) 
{ 
    // in case we have only the year try to make a string match 
    filteredSales = filteredSales.Where(s => s.SaleDate.Value.Year.ToString().Equals(suchbegriff)); 
} 

Michael

Répondre

1

Faire la comparaison en utilisant un objet DateTime, non pas avec des chaînes par exemple:

// Parse the search term string to DateTime, using the german culture 
DateTime date = DateTime.Parse(searchTerm, new CultureInfo("de-DE")); 

var sales = filteredSales.Where(s => s.SaleDate == date); 
1

Avez-vous essayé quelque chose comme

s => s.SalesDate == Date de .Parse ("01 November 2008")

ou

s => s.SalesDate == Date.parse (MaDate)

ou

s => s.SalesDate.Year == "2008"

Au-dessus est non testé. Surtout le dernier mais essentiellement vous voulez tester l'année contre un nombre ou une année.

Je ne pense pas que je pourrais jamais utiliser contient dans une requête qui impliquait un champ de date.