3

我想比较两个波斯日期以找出哪个更大,我使用此功能:

public static List<MatchDrawHistory> GetAllMatchDrawHistory(string startDate, string endDate) 
{
    using (var db= new ReceiveSendEntitiesV5())
    {
        var matchDrawList = db.MatchDrawHistories.Where(x => String.CompareOrdinal(x.DrawStartDate,startDate)>=0 && String.CompareOrdinal(x.DrawEndDate , endDate) <=0).ToList();
        return matchDrawList;
    }
}

但它不起作用,我该怎么做?

编辑: DrawStartDate并且DrawStartDatenvarchar(20)DataBase这些是波斯日期而不是公历日期

4

3 回答 3

1

您的问题是您试图将日期存储为字符串。我认为你班级中的日期是字符串,所以我会传入一个 DateTime,并使用如下内容:

var matchDrawList = db.MatchDrawHistories.Where(x => DateTime.Parse(x.DrawStartDate) >= startDate && DateTime.Parse(x.DrawEndDate) <= endDate).ToList();

如果您不确定字符串是否会正确解析为日期,您可以创建一个函数来包装 a TryParse,这取决于您的业务逻辑,这可能更可取,因为如果日期无效,您可能仍然想要其他结果。

static bool CheckDateGreater(string date1, string date2)
{
    DateTime dt1;
    if (!DateTime.TryParse(date1, out dt) return false;

    DateTime dt2;
    if (!DateTime.TryParse(date2, out dt) return false;

    return (dt1 >= dt2);
}

然后调用:

var matchDrawList = db.MatchDrawHistories.Where(x => CheckDateGreater(x.DrawStartDate, startDate) && CheckDateGreater(endDate, x.DrawEndDate).ToList();

编辑:

刚刚看到你对波斯日期的评论。您需要使用PersianCalendar类。那应该返回一个 DateTime 对象。

于 2014-09-20T08:55:45.520 回答
1

首先,您需要将string日期转换为DateTime. 假设您的字符串日期为yyyy/MM/dd,则转换函数可以如下:

private static DateTime ParseDate(string date)
{
    var pc = new PersianCalendar();
    string[] arrDate = date.Split("/");

     return pc.ToDateTime(Int32.Parse(arrDate[0]), Int32.Parse(arrDate[1]), 
        Int32.Parse(arrDate[2]), 0, 0, 0, 0);
}

现在您可以使用以下方法比较两个日期:

private static bool Compare(DateTime firstDate, DateTime secondDate)
{
    return firstDate >= secondDate;
}
于 2018-07-22T05:24:23.213 回答
0

用于DateTime比较而不是string

var start = DateTime.Parse(startDate);
var end = DateTime.Parse(endDate);
...
db.MatchDrawHistories.Where(x => x.DrawStartDate >= start && x.DrawEndDate <= end)
于 2014-09-20T09:01:04.550 回答