【问题标题】:Check the date with Linq-to-SQL使用 Linq-to-SQL 检查日期
【发布时间】:2009-08-20 05:34:39
【问题描述】:

我有以下问题:在一个数据库表中有销售记录。其中一个字段是 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”。

感谢您的帮助。

迈克尔

以下是基于以下所选答案的完整解决方案:

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

迈克尔

【问题讨论】:

    标签: sql-server asp.net-mvc linq-to-sql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你有没有尝试过类似的东西

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

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

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

      以上内容未经测试。尤其是最后一个,但基本上你想用数字或年份来测试年份。

      我认为我永远不会在涉及日期字段的查询中使用 contains。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        相关资源
        最近更新 更多