3

2 つのペルシャの日付を比較して、どちらが大きいかを調べたい場合は、次の関数を使用します。

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そしてにDrawStartDateあり、これらはグレゴリオ暦ではなくペルシア暦ですnvarchar(20)DataBase

4

3 に答える 3

1

問題は、日付を文字列として保存しようとしていることです。あなたのクラスの日付は文字列だと思うので、DateTime を渡し、次のようなものを使用します。

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

文字列が正しく日付に解決されるかどうかわからない場合は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 に答える