Проверьте дату с Linq-to-SQL - PullRequest
       18

Проверьте дату с Linq-to-SQL

0 голосов
/ 20 августа 2009

У меня следующая проблема: в таблице базы данных записаны продажи. Одним из полей является SaleDate, которое является типом даты SQL Server. Сайт теперь позволяет искать в этом поле. И это позволяет искать только по году.

Предположим, есть одна запись с датой 2008/11/01. Если я ищу «2008», запись возвращается, что, конечно, правильно. Но поиск "2008/11/01" не вернет запись.

Так вот мой код:

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

Они тоже не работают.

Возможно, это вовсе не проблема LinQ, а скорее культура, так как это немецкое приложение, а поисковый термин действительно "01.11.2008". Но когда я вывожу значение из базы данных или даже смотрю прямо в базу данных, оно отображается на «01.11.2008».

Спасибо за помощь.

Michael

Вот полное решение, основанное на выбранном ответе ниже:

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

Ответы [ 2 ]

1 голос
/ 20 августа 2009

Выполните сравнение, используя объект DateTime, а не строки, например:

// 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 голос
/ 20 августа 2009

Вы пробовали что-то вроде

s => s.SalesDate == Date.Parse ("01 ноября 2008")

или

s => s.SalesDate == Date.Parse (MyDate)

или

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

Выше не проверено. Особенно последний, но, по сути, вы хотите проверить год или число, или год.

Я не думаю, что когда-либо использовал бы содержащееся в запросе поле с датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...