Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengonversi string ke int di linq ke entitas di database besar

Saya pikir cukup aman untuk melakukan perbandingan sebagai string, kecuali jika Anda memiliki tahun <1000 atau> 9999:

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

EF menerjemahkan ini ke dalam predikat SQL seperti

WHERE [alias].[stringYear] > @p

yang mungkin dalam SQL tetapi tidak dalam C#.

Keuntungannya adalah indeks apa pun pada stringYear dapat digunakan dalam rencana eksekusi. Mengonversi stringYear ke nomor menghilangkan indeks apa pun.

Metode ini masih berguna ketika kolom string berisi nilai string bergerigi. Dalam kasus seperti itu predikat harus digabungkan dengan Panjang. Misalnya, untuk menemukan semua entitas di mana string numerik sebagai bilangan bulat lebih besar dari beberapa nilai referensi

var len = myNumberString.Lenght;

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

Kemudian mesin kueri tidak dapat menggunakan indeks untuk perbandingan panjang tetapi mungkin dapat melakukannya untuk > perbandingan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Dapatkan kunci utama tabel menggunakan kueri sql

  2. Generator data untuk server SQL?

  3. Perbedaan antara Pengguna dan Login di SQL Server

  4. Bagaimana kita bisa melihat tubuh prosedur tersimpan terenkripsi di SSMS?

  5. Mengapa menggunakan Pilih 100 Persen Teratas?