Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразуване на низ в int в linq към обекти в голяма база данни

Мисля, че е доста безопасно да направите сравнението като низ, освен ако нямате години <1000 или> 9999:

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

EF превежда това в SQL предикат като

WHERE [alias].[stringYear] > @p

което е възможно в SQL, но не и в C#.

Предимство би било всеки индекс на stringYear може да се използва в план за изпълнение. Преобразуване на stringYear към номер елиминира всеки индекс.

Този метод все още е полезен, когато колоната с низ съдържа назъбени стойности на низ. В такъв случай предикатът трябва да се комбинира с Length. Например, за да намерите всички обекти, където всеки числов низ като цяло число е по-голям от някаква референтна стойност

var len = myNumberString.Lenght;

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

Тогава машината за заявки не може да използва индекси за сравнение на дължината, но може да е в състояние да го направи за > сравнение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на GROUP BY с FIRST_VALUE и LAST_VALUE

  2. SQL Server Trigger:Разбиране и алтернативи

  3. как да шифровате колоната с парола

  4. Изберете непразни колони с помощта на SQL Server

  5. Премахване на база данни на SQL Server чрез C#