0

C#でLINQ検索を使用しています。私の検索の1つでは、をに変換する必要がありstringますintint.parse()またはを使用しようとするとconvert.toInt32()、エラーが表示されます(LINQでは認識されません)

例えば:

var google = from p in ctx.dates
       where int.Parse(p.effDate) < 20101212 && int.Parse(p.effDate) > 20121212
           select p;

ご覧のとおり、日付をフォーマット形式で含む文字列があり、yyyymmddそれらの日付間を検索できるように整数に変換したいと思います。

4

4 に答える 4

8

このyyyyMMdd形式には、辞書式順序が時系列順序と同じであるという優れた特性があるため、文字列比較を使用できます。

var google = from p in ctx.dates
             where p.effDate.CompareTo("20121212") < 0
             && p.effDate.CompareTo("20101212") > 0
             select p;
于 2012-12-17T11:39:52.113 に答える
1

まず、ほとんどの場合失敗するため、日付を int に変換するだけでは日付を比較できません。DateTime Parseまたはを使用して文字列を解析し、ParseExactそれらを比較します。

于 2012-12-17T11:41:39.230 に答える
0

これint.Parseは、クライアント呼び出しであるためです。Linq プロバイダーは、それをデータベース関数にマップする方法を認識していません。

文字列は簡単にソートできる形式になっているため、 を使用できますwhere p.effDate < "20101212" && p.effDate > "20121212"

より良いアプローチは、日付をdate列ではなく列charに格納するようにデータベースを変更することvarcharです。

于 2012-12-17T11:42:44.040 に答える
0

最終的に私はまともな答えを見つけました:

 google = from p in ctx.dates
 where p.effDate.CompareTo(picker1) > 0 && p.effDate.CompareTo(picker2) <0 
select p; 

picker1 と picker2 はどちらも「yyyymmdd」の文字列です

于 2012-12-18T12:53:52.060 に答える