2012-06-28 18 views
6

SQL'e çevirecek olan Linq sorgularında kullanılabilecek bir işlev oluşturmanın bir yolunu arıyorum. Linq-to-SQL kullandığımızda, benzer bir question. Cevap, db'deki bir UDF'ye eşlenmekti. Model tanımının temizliği nedeniyle kod ilk modelini kullanıyoruz, ancak maalesef define functions'a giden bir yol yok, fonksiyonlara eşleme ve söyleyebileceğim kadarıyla kaydedilmiş pro-süreçleri eşleştir (sanırım buradaki ilk fikir) db'yi oluşturmalı ve ona bir şeyler eklememeliyim). Zaman içinde gelişebilecek verimsizlikler ile başa çıkmak için kolay bir yönteme izin vermediğinden, bana göre çok ölçekli görünmüyor, fakat ne burada ne de orada ne var ki ...EF Kodu: SQL'e çevirebilen yöntemler

Her neyse, buradaki ifadeleri tanımlayabileceğimi biliyorum. Öyle gibi benim sorgularında kullanabileceğiniz SQL çevirecek:

public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber) 
{ 
    return x => x.SomeProperty == comparisonNumber; 
} 

var query = MyEntities.Where(FilterMe(1)); 

bool dönmek İfadeler için bu sadece mümkün mü? Ben çizgisinde bir şey arıyorum:

var query = from m in MyEntities 
      let endDate = GetEndDate(m.Start, m.Duration) 
      where endDate <= DateTime.Now 
      select m; 

bir ifade fonksiyonunda GetEndDate oluşturmak için birkaç yolu var mı? GetEndDate içindeki kod, sorguda uzun süre yazdığımda SQL'e iyi gelir, ancak oldukça uzun ve okunacak kadar kafa karıştırıcı.

Düzenleme - Birisi "DateAdd için SQLFunctions kullan" ile yanıt vermeden önce, benim örneğim bu bir örnektir. Bunu kullanmak istediğim sayısız başka yol var. Şimdiden teşekkürler.

+0

Bunu denediniz mi? Yani, bir 'İfade >' döndürün ve 'GetEndDate (m) <= DateTime.Now' sorgusunu yapın. – mellamokb

+0

Evet, ve bu işe yaramaz. "İfade >' ve "DateTime" ile karşılaştıramazsınız. – Ocelot20

+0

Cevabımı denediniz mi? – Guillaume86

cevap