sql >> Database teknologi >  >> RDS >> Sqlserver

Konvertering af streng til int i linq til entiteter på stor database

Jeg tror, ​​det er ret sikkert at lave sammenligningen som streng, medmindre du har år <1000 eller> 9999:

... dr.stringYear.CompareTo(myNumberString) > 0

EF oversætter dette til et SQL-prædikat som

WHERE [alias].[stringYear] > @p

hvilket er muligt i SQL, men ikke i C#.

En fordel ville være, at ethvert indeks på stringYear kan bruges i en udførelsesplan. Konvertering af stringYear til nummer eliminerer ethvert indeks.

Denne metode er stadig nyttig, når strengkolonnen indeholder takkede strengværdier. I et sådant tilfælde bør prædikatet kombineres med længde. For eksempel at finde alle enheder, hvor en numerisk streng som heltal er større end en referenceværdi

var len = myNumberString.Lenght;

var query = 
    from row in context.LegacyTable
    where row.NumericString.CompareTo(myNumberString) > 0
       && row.NumericString.Length >= len
    select row; 

Så kan forespørgselsmotoren ikke bruge indekser til længdesammenligningen, men den kan muligvis gøre det for > sammenligning.



  1. Sender data fra React til MySQL

  2. Node.js MySQL-modul - smid fejl; // Genkast ikke-MySQL-fejl;

  3. Brug af en grænse på en venstre join i mysql

  4. Dvale OneToOne doven indlæsning og cascading