絶対にデータベースの設計を変更する方法はありませんがあります場合は、コメントで示唆されているように、あなたはすべてのデータを取得し、ローカルにdate
に変換するか、値が変換されますDBでビューを作成するか試みることができますdate
タイプに変更します。
.Select(f=> new {Record=f, Date=DateTime.Parse(f.Date)})
.Where(f => f.Date >= Date1 && f.Date <= Date2)
私はあなたがSqlFunctions
(ただし、私はそれを試したことがありません)
.Select(f=> new {Record=f, Date= SqlFunctions.DateAdd("day", 0, f.Date)})
.Where(f => f.Date >= Date1 && f.Date <= Date2)
と直接SQLでそれを変換することができると思う:あなたはこのような何かを行うことができ、最初のオプションについては
または直接ここで:
.Where(f => SqlFunctions.DateAdd("day", 0, f.Date) >= Date1 && SqlFunctions.DateAdd("day", 0, f.Date) <= Date2)
2番目のオプションは、作成する01 DB内のconvert (datetime, *yourDateField*, 101)
- あなたのケースでは101
が不明です。
明確にする:これらはどれも最適化されていません。 DBデザインを変更するのがベストです
yyyyMMDDのような形式でない限り、日付の 'string'比較はできません。比較を行うには、それらを「DateTime」または意味のある部分(月、日、年)に解析する必要があります。 – juharr
文字列としての日付の格納は、非正規化の形式です。言い換えれば、それは悪いデータベース設計なので避けるべきです*。理由はあなたの質問からかなり明らかです。正規化されていないデータは、照会や比較などができません。正しい列型を使用するか、日付で照会しないでください。それがあなたの選択です。 –
*不可能*このような不可欠な改善には当てはまりません。少なくともDateTimeでは、既存のフィールドを置き換えるのではなく、トリガーと同期させる代わりに、フィールドを追加することができます。私は確かにs/oの腕をねじれようとします。 –