SORU
25 Mart 2009, ÇARŞAMBA


Nasıl varlık çerçevesi içinde null değerler için sorgu miyim?

Böyle bir sorgu çalıştırmak istiyorum

   var result = from entry in table
                     where entry.something == null
                     select entry;

ve bir IS NULL oluşturulan.

Düzenlenmiştir: İlk iki cevaptan sonra Varlık Çerçevesi kullandığımı açıklamak ihtiyacı hissediyorum ve SQL için Seri değil. Nesne.() Eşittir yöntem EF çalışmak için görünmüyor.

Hayır düzenleyin.2: Yukarıdaki sorgu, beklendiği gibi çalışır. Doğru IS NULL oluşturur. Üretim kodumu ancak

value = null;
var result = from entry in table
                         where entry.something == value
                         select entry;

ve oluşturulan SQL something = @p; @p = NULL oldu. EF doğru sabit ifade çevirir gibi görünüyor ama eğer bir değişken söz konusu ise normal bir karşılaştırma gibi davranır. Mantıklı aslında yapar. Bu soruyu kapatırım

CEVAP
29 Mart 2010, PAZARTESİ


Lınq-to-SQL: için geçici çözüm

var result = from entry in table
             where entry.something.Equals(value)
             select entry;

Seri-Varlıklar için geçici çözüm (ah!):

var result = from entry in table
             where (value == null ? entry.something == null : entry.something == value)
             select entry;

Bu bana birkaç kez ısırdı ki kötü bir hata değildir.Eğer bu hata çok etkilenen varsa, lütfen bug report on UserVoice ziyaret edin ve Microsoft, bu hata sizi etkisi altına iletebilirsiniz.


Düzenleme:This bug is being fixed in EF 4.5! Bu hata upvoting için herkese teşekkürler!

Geriye uyumluluk için, opt-in - bir ayarı entry == value çalışması için etkinleştirmeniz gerekir el ile olacaktır. Ne bu ayar haber yok henüz. Bizi izlemeye devam edin!


Edit 2:EF ekibi tarafından this post görebu sorunu EF6 sabit olmuştur! Woohoo!

EF6 varsayılan davranışını üç-değerli mantık telafi etmek için değiştirdik.

Bu eski davranış dayalı varolan kodu anlamına gelir(Değişken karşılaştırarak teknull != null ama)ya bu davranışı kullanan veya UseCSharpNullComparisonBehavior false eski kırık davranışı kullanmak için değiştirilmesi gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • Muse

    Muse

    28 EYLÜL 2006
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010