2011-12-28 16 views
9

Linq sorgusunda iki tarihin eşit olup olmadığını ve tarihlerin iki farklı tablodan geldiğini kontrol etmem gerekiyor (parametre olarak değil)). Web'de ve SO'da mevcut çözümlere baktım. Bazıları benim durumumda geçerli değil ve bazıları zarif değil. sadece varsa daha iyi bir alternatif çözüm arıyorum.İki tarihin eşit olup olmadığını kontrol etmek için şık bir çözüm, Linq'de (ikinci tarihin parametresi DEĞİLDİR)

örnek sorgu (sadece tarih bölümlerini karşılaştırmak gerekir):

var query = from t1 in Table1 
      join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
      where t1.Id = someId 
       && t1.Date1.Date.Equals(t2.Date2.Date) 

bu bir Entitiies için LINQ desteklenmeyen bir hata " 'Tarih' ile başarısız Sadece başlatıcıları, varlık üyeleri ve varlık navigasyon özelliklerini. "

" 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported numaralı yayın, gün, ay ve yılı ayrı ayrı karşılaştıran bir çözüm sunar. Bir uzantı yöntemine sarmayı denedim, ama Linq'in uzantı yöntemlerini de sevmediği anlaşılıyor. ikinci tarih değişkeni olmadığından, bağlantılı postada belirtilen diğer çözümü kullanamıyorum (ve bir nedenden dolayı Linq içinde bir tarihte "AddDays" yöntemini arayamıyorum). Linq'de Date API ile birçok sınırlama var gibi görünüyor.

+0

karşılaştıran gün, ay ve yıl ayrı çalışıyor mu? – dasblinkenlight

+0

evet, bunları ayrı ayrı karşılaştırırsam çalışır. – RKP

cevap

16

EntityFunctions sınıfından DiffDays kullanmayı deneyin. Şahsen bu hiç kullanılmamış, ancak değer böyle deneyin: beklendiği gibi

var query = from t1 in Table1 
     join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
     where t1.Id = someId 
      && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0 
+1

Çok teşekkürler. Bu bir cazibe gibi çalışır. Oluşturulan SQL'e baktım ve tarih karşılaştırması DATEDIFF (gün, t1.Date1, t2.Date2) = 0'a dönüştürüldü, ki bu doğru. Bu "EntityFunctions" hakkında daha önce bilmiyordum. Tekrar teşekkürler. – RKP

+0

Hoşunuza gitti, bu yardımcı oldu :) – Reniuz

+0

kodunuzun biraz değiştirilmiş versiyonunu kullandığımı söylemeyi unuttu. Gönderiimde belirtildiği gibi "Tarih" özelliğini "Datetime" özelliğini kullanamıyorum, bu yüzden "EntityFunctions.DiffDays (t1.Date1, t2.Date2) == 0" kullandım ve işe yaradı. – RKP

0

Hatırladığım süre içerisinde, sadece == operator sayfasını kullanarak tarihlerini karşılaştırabilirsiniz.

+0

'==' hem tarih hem de saat bölümlerini karşılaştırır; OP sadece karşılaştırılacak tarihi istiyor. – dasblinkenlight