これは、Linq to Entitiesではサポートされていません(私の知る限り、Linq to SQLでもサポートされていません)。クエリはデータベースで実行されることを忘れないでください。データベースに相当するものはありませんConvert.ToDateTime
。
クエリでの文字列の解析は、実際には回避策にすぎません。実際の解決策として、これらの列を文字列datetime
ではなくデータベースに作成すると、そもそもこの問題は発生しません。
ハッキーな回避策は、すべての行をマテリアライズしてから(そのために使用できますAsEnumerable()
)、解析を実行することです。ただし、これはパフォーマンスが低下しますが、行が少ない場合は十分に機能する可能性があります。
var startDate = DateTime.Parse(validDateStart);
var list = priceList.AsEnumerable()
.Where(p => DateTime.Parse(p.ValidDate) >= startDate);
.ToList();
編集:
サンプルの更新では、文字列の比較を行うだけで、必要なことを実行できるように見えます。これはまだハックですが、すべての行をマテリアライズするよりもはるかに優れたパフォーマンスを発揮します。これが可能なのは、日付形式で最も重要な数値が最初に配置され、次に重要度の低い部分が配置されるためです。つまり、年、月、日です(これが当てはまらず、例の月の前に日が来る場合、このソリューションは機能しません。 )。
入力文字列が同じ形式であると仮定すると、validDateStart
次のように実行できます。
var list = priceList.Where(p => p.ValidDate.CompareTo(validDateStart) >=0);
.ToList();
との文字列比較は、 LinqtoSqlとLinqtoEntitiesString.CompareTo
の両方でサポートされているようです。