SORU
4 Aralık 2008, PERŞEMBE


SERİ: Max veya Varsayılan?

Hiçbir satır döndürebilir SERİ bir sorgudan Max değerini almak için en iyi yolu nedir? Ben sadece eğer

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter).Max

Sorgu hiçbir satır döndürür bir hata alıyorum. Yapabilirim

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select y.MyCounter _
         Order By MyCounter Descending).FirstOrDefault

ama böyle basit bir istek için biraz kalın kafalı hissediyorum. Daha iyi bir yol yapmak için mi kaçırdım?

GÜNCELLEME: Buraya bir hikaye: uygunluk sayaç çocuk tablo (eski sistem, beni anlamıyor başladı...). bir sonraki almak için çalışıyorum Her hasta için ilk uygunluk satır her zaman ikinci 2, vb. 1. (belli ki bu çocuk tablonun birincil anahtar değil). Yani, bir hasta için max mevcut sayaç değeri seçerek ve sonra 1 satır oluşturmak için ekliyorum. Mevcut alt değerleri yok, sorgu 0 (ekleme 1 bana 1 sayaç değeri verecektir) geri dönmek istiyorum. Eski app sayaç değerlerini boşlukları (Olası) tanıtır diye alt satır ham sayısı güvenmek istemiyorum unutmayın. Soru çok genel yapmak benim için kötü.

CEVAP
4 Aralık 2008, PERŞEMBE


Defaultıfempty ETMENİZ SQL için uygulanan olmadığına göre, iade ve toplam işlevlerinde boş küme ile ilgilenir fascinating article Bir hata hakkında bir araştırma yaptım. Ne buldum özetlemek gerekirse, seçmek içinde bir null döküm bu kısıtlamaya alabilirsiniz. Benim VB biraz paslı, ama bendüşünüyorumböyle bir şey çıkacağını:

Dim x = (From y In context.MyTable _
         Where y.MyField = value _
         Select CType(y.MyCounter, Integer?)).Max

Ya da C#

var x = (from y in context.MyTable
         where y.MyField == value
         select (int?)y.MyCounter).Max();

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009
  • PoreoticsHD

    PoreoticsHD

    22 NİSAN 2010
  • soyacincautv

    soyacincautv

    14 NİSAN 2010