年が 1000 年未満または 9999 年を超えていない限り、文字列として比較を行うことは非常に安全だと思います:
... dr.stringYear.CompareTo(myNumberString)> 0
プレ>EF はこれを次のような SQL 述語に変換します
WHERE [エイリアス].[stringYear]> @p
プレ>これは SQL では可能ですが、C# では不可能です。
利点は、
stringYear
の任意のインデックスであることです 実行計画で使用できる場合があります。stringYear
の変換 to number はインデックスを削除します。このメソッドは、文字列列にギザギザの文字列値が含まれている場合にも役立ちます。このような場合、述語は長さと組み合わせる必要があります。たとえば、整数としての数値文字列が参照値より大きいすべてのエンティティを検索するには
var len =myNumberString.Lenght;var query =context.LegacyTable の行から、row.NumericString.CompareTo(myNumberString)> 0 &&row.NumericString.Length>=len select row; コード> プレ>
その場合、クエリ エンジンは長さの比較にインデックスを使用できませんが、
>
では使用できる場合があります。 比較。