2

LINQ と C# を使用して mySQL DB からレコードを取得しようとしています。

C# コードの日付は文字列です: 23-01-2010

これを 2010-01-23 (mySQL のデフォルトの DateTime 形式) として DateTime 形式に変換する必要があります。そうしないと、クエリはレコードを返しません。現在、文字列を DateTime (row.DateOfIssue) と照合できないというエラーが発生します文字列を DateTime (C#) に変換すると、yyyy-MM-dd の mySQL DateTime 形式ではなくなります

String endDate = "23-01-2010"; 
var query = (from row in uow.UserPersonalLicenseDetails
                             where (endDate >= row.DateOfIssue && endDate <= row.DateOfExpiry)
                             select row)

これは非常に標準的なクエリであるため、LINQ で実行するのは非常に困難です。CompareTo などのメソッドを where 句に入れると、「このシナリオで機能するクラスを検索してください」というエラーが発生するようです

データベースにストアド プロシージャを書き込むことが最善の攻撃方法ではないかと考えています。これにより、C# の日時をパラメーターとして取り、それを mySQL 形式に変換してから、必要なクエリを実行することができます..... 何か考えはありますか?

4

3 に答える 3

2

Make it a DateTime - so

var myDate = DateTime.Parse(endDate); 

Then

myDate.ToString("yyyy-MM-dd");

---------- or this:

    var myDate = DateTime.Parse(endDate); 
var query = (from row in uow.UserPersonalLicenseDetails 
where ((myDate.CompareTo(row.DateOfIssue)>=0 && (myDate.CompareTo(row.DateOfExpiry)<=0) 
select row
于 2012-05-04T12:13:26.117 に答える
0

日付文字列をにDateTime変換してから、LINQ で文字列を変換しDateTimeて、比較を行います。私が使用ParseExactしたのは、MySQL が日付を格納する正確な形式 ( yyyy-MM-dd hh:mm.

何かのようなもの:

var endDate = DateTime.Parse("23-10-2010").ToString("yyyy-MM-dd hh:mm");
var formattedEndDate = DateTime.Parse(endDate);
//you could cut that to one line by putting the date in said format in the first place

var query = (from row in uow.UserPersonalLicenseDetails
             where formattedEndDate >= row.DateOfIssue
                 && formattedEndDate <= row.DateOfExpiry
             select row)
于 2012-05-04T15:04:49.300 に答える
0

OK、問題は、テーブルのフィールドが DATETIME ではなく DATE として定義されていたため、一致が行われなかったことです。

DateTime.Date を使用し、一致しました。

于 2012-05-17T20:43:28.783 に答える