2012-03-23 16 views

cevap

11

bu deneyin: Ayrıca

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == DesiredField.Trim().ToUpper()) 

, ben sorguya dışında parametreyi ayarlamak için öneririm:

var value = DesiredField.Trim().ToUpper(); 

... 

q => q.Where(entity => entity.CaseInsensitiveField.ToUpper() == value) 
+0

bu, doğru bir şekilde çevrilecek mi? –

+0

Evet, ToUpper() yöntemi SQL sorgunuzda ÜST (alan) olarak çevrilecektir. –

+0

ivowiblo: Alçakgönüllü olduğunuzu itiraf ediyorum, ContainsLike yöntemim SQL'e çevrilmeyecek. Daha fazla bilgi için lütfen cevabıma yaptığım yorumu görün. Teşekkürler, tüm alçakgönüllülükle. –

4

bunu kullanın:

q => q.Where(entity => 
    String.Equals(entity.CaseInsensitiveField , CaseInsensitiveField , 
        StringComparison.OrdinalIgnoreCase)); 

GÜNCELLEME

O (en azından LINQPad yoluyla) belirir yukarıdaki SQL çevirmek olmaz, bu nedenle ivowiblo önerdi zaten olduğu gibi, ben, öneririm:

var comparisonValue = CaseInsensitiveField.ToUpper(); 
q => q.Where(entity => 
    entity.CaseInsensitiveField.ToUpper() == comparisonValue); 

ToUpper'ı önceden ayarlama nedeni, yordamsal işlevlerin genellikle daha kötü olmasıdır. SQL'de se, ve bu bir veritabanı alanı olmadığından, onu büyük harfle yazabiliriz.

+0

+1 İyiydi, bundan haberi yoktu! Paylaşım için teşekkürler! –

+0

String.Equals doğru bir şekilde çevrilecek mi? –

+0

'string.Equals' veya' entity.CaseInsensitiveField == 'aynıdır, bu yüzden evet tıpkı yaptığınız gibi basit bir karşılaştırma olarak çevrilir. –