【问题标题】:Linq with date comparision not working带有日期比较的 Linq 不起作用
【发布时间】:2015-10-21 11:46:03
【问题描述】:

我需要使用 LINQ 将两个日期范围与记录列表进行比较,但由于某种原因,我陷入了困境。我正在接收字符串格式的日期,并将其转换为 DateTime。我知道数据库中有特定日期范围内的数据,所以我应该取回记录。

public static string FilterStudentListInRelationToStaffByDateRange(
    string GivenStaffID, 
    string SelectFilterOption, 
    string FromDate, 
    string ToDate)
{ 
    var dt = DateTime.Parse(FromDate);
    // var fff = String.Format("{0:d/M/yyyy hh:mm:ss}", dt);

    var dt3 = DateTime.Parse(ToDate);
    //var fff3 = String.Format("{0:d/M/yyyy hh:mm:ss}", dt3);

    var x = (from b in queryList
            where b.RelationshipDateStart >= dt && b.RelationshipDateEnd <= dt3
            select b).ToList();

【问题讨论】:

  • 显示queryList中的数据以及FromDate和ToDate的值。
  • RelationshipDateStartRelationshipDateEnd 是数据库中的实际日期字段,还是varchar 的变体?
  • 是的RelationshipDateStart 和RelationshipDateEnd 是日期字段
  • 这里没有足够的信息让我们帮助您。请包括queryList 中的数据示例以及FromDateToDate 的值。告诉我们它是 Linq-to-Objects 还是 Linq-to-SQL 或 EF。向我们展示queryList 包含的实体或类的定义。
  • 那么你得到的是一个空列表吗?你确定 DateTime 被正确解析了吗?

标签: c# linq datetime-comparison


【解决方案1】:

日期/时间解析可能很烦人,尤其是在您处理不同格式的情况下。

如果你知道格式,可以试试DateTime.ParseExact

CultureInfo provider = CultureInfo.InvariantCulture;
string format = "d/M/yyyy hh:mm:ss";

try 
{
    var dt = DateTime.ParseExact(FromDate, format, provider);

    var dt3 = DateTime.ParseExact(ToDate, format, provider);

    var x = (from b in queryList
            where b.RelationshipDateStart >= dt && b.RelationshipDateEnd <= dt3
            select b).ToList();

}
catch (FormatException) 
{
     Console.WriteLine("Date is not in the correct format.");
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多