sql >> データベース >  >> RDS >> Sqlserver

大きなデータベースのエンティティにlinqで文字列をintに変換する

    年が 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;   

    その場合、クエリ エンジンは長さの比較にインデックスを使用できませんが、 > では使用できる場合があります。 比較。



    1. 単一のクエリでxmlフィールドに複数のノードを挿入する

    2. カスケードが不要な場合の外部キー

    3. mysql_fetch_array()を呼び出すときに、提供された引数を取得することは、有効なMySQL結果リソースではありません

    4. 動的列の行への転置