2012-05-04 21 views
2

LINQとC#を使用してmySQL DBからレコードを取得しようとしています。そうでない場合は、クエリはいずれも返さない、私は2010年1月23日(MySQLのデフォルトDateTime書式)としてDateTime書式にこれを変換する必要があり23-01-2010C#MySQL LINQ DateTime変換

C#コードの日付は文字列ですレコード、現在のところ、文字列を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で行うことが非常に難しいことを怒っているような標準的なクエリです。 WhereTo節にCompareToなどのメソッドを置いているようですが、「このシナリオで動作するクラスを検索してください」というエラーが発生します。

ベストプラクティスがストアドプロシージャを記述するのに不思議に思っていますデータベースに格納されます。これは、C#datetimeをパラメータとして使用し、それをmySQL形式に変換してから、必要なクエリを実行します。 考えていますか?

+0

これは http://stackoverflow.com/questions/3633262/convert-datetime-for-mysql-using-c-sharp – user1208484

答えて

2

それ日時作る - そう

var myDate = DateTime.Parse(endDate); 

その後

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

----------またはこれを:

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 
+0

これはエラーを与える助けるかもしれない:「演算子は> =タイプのオペランドに適用することはできませんStringとSystem.DateTime – user1079925

+0

これは何ですか?: 文字列endDate = "23-01-2010"; var myDate = DateTime.Parse(endDate).ToString( "yyyy-MM-dd"); var query =(from uow.UserPersonalLicenseDetails(MyDateに該当> = row.DateOfIssue && MyDateに該当<= row.DateOfExpiry) 選択した行の行) – Chris

+0

はい、それは設計時にエラーが発生します - でも、コンパイルされません – user1079925

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) 
+0

これは有望ですが、ParseExactは最初のparmae​​terがStringであることを期待しています。DateOfIssueはデータベースの日付...... thx – user1079925

+0

ああ、私は彼らが文字列だと思って、反映するために私の答えを更新しました:) – mattytommo

+0

私はこれが動作するとは思わない。 ParseExactは、パラメーター1の形式がパラメーター2で指定されたものとまったく同じであると想定しています。 – user1079925

0

[OK]を、問題が表にはとてもマッチが行われていないされていたというよりもDATETIME DATEとして定義されたフィールドを持っていたことでした。

使用したDateTime.Dateと一致しました。

関連する問題