LINQ

2009-08-10 21 views
6

içinde dakika hassasiyetiyle Datetime değerlerinin eşitliğini belirleyin. Dakikayı kullanarak eşitliği (tam olarak aynı) belirlemek için iki zaman süresi değerini karşılaştırmalıyım. Bunu yapmanın en iyi yolu bu olabilir mi? Tarihlerim saniyede ve milisaniyede olabilir, ancak yalnızca dakikalara kadar düşünmek istiyorum.LINQ

 where (Math.Abs(datetime1.Subtract(datetime2).TotalMinutes) == 0) 
+0

Bu snippet'i alıp sorunuzu yanıt olarak gönderirim, böylece kullanıcıların –

cevap

11

Math.Abs(diff.TotalMinutes) == 0'un bunu yapıp yapmadığını kontrol etme, hayır - bu, tam olarak aynı olup olmadığını kontrol eder.

Aynı dakikaya sahip olup olmadıklarını mı yoksa bir dakikadan daha az mı olduklarını kontrol etmeye mi çalışıyorsunuz? İlk, kullanım için:

where RoundToMinute(dateTime1) == RoundToMinute(dateTime2) 

ilan ettikten: İkinci, kullanım içindir

public static DateTime RoundToMinute(DateTime time) 
{ 
    return new DateTime(time.Year, time.Month, time.Day, 
         time.Hour, time.Minute, 0, time.Kind); 
} 

:

where Math.Abs((dateTime1 - dateTime2).TotalMinutes) < 1 

Sen sonuç durumunda olmak istediğini düşünmelisiniz biri yerel ve UTC'de, bu arada ...

Burada LINQ'ya özel bir şey olmadığını unutmayın - Nesneleri LINQ kullanarak. Eğer LINQ to SQL kullanıyorsanız, o zaman yerel metotları kullanamazsınız ve tekrar bakmak zorundayız ...

DÜZENLEME: Sorunuzda hala çok açık değilim. Eğer tam aynı tarih/saat olmalarını gerekiyorsa, (UTC sorunu vs olası yerel bir kenara bırakarak) kolay:

where dateTime1 == dateTime2 

Ancak, "dakika hassas" in söz niçin sorusunu yalvarır soru başlığı veya soru gövdesinde "bir dakikaya kadar kesinlik kullanarak". .

(Math.abs (datetime1.Subtract (:

+0

Jon - Gelecek tarihlerin saniyeler içinde olabileceğinden RoundToMinute (datetime) kullanmamaya özen gösterdim ve bir dakikalık hassasiyeti korumak istedim. Her ne kadar Math.abs onu da atabilir? Kurs tarihlerini kullanmadan önce saniyeleri kapatabilirim! Ama sorgunuzu cevaplamak için, evet ben tam olarak aynı olmanın onlara ihtiyacım var – PreethaA

+1

@Preetha: Eğer * tam olarak aynı * olmanız gerekiyorsa, o zaman soru başlığına göre "dakika hassasiyeti" ne ihtiyacınız var? –

+0

datetime değerlerinin olması durumunda, saniyeler içinde takılı olup olmadıklarından emin olamayacağınız, ancak bununla ilgilendiğiniz her şeyin tam olarak aynı olup olmadıklarıdır. Sanırım stripsit bölümünün tamamen ayrı olması ve değerlerin gerçek karşılaştırmasından önce gelmesi gerekiyordu. Bu durumda bu işe yarayacaktı. – PreethaA

0

Nasıl

where (Math.Floor(datetime1.Ticks/600000000) == Math.Floor(datetime2.Ticks/600000000)) 

hakkında?

+0

sorusundan ayrı olarak yorum yazabilir veya oy verebilirler. –

+0

sorusunu gördüğümde tam olarak ne düşündüğümü sorgular. datetime1.Millisecond', bu doğru değil - değer her zaman 0 ile 999 arasındadır. –

0

Teşekkür Allen, yapacak (! Hala süreç tam olarak nasıl çalıştığını bulmaya) İşte ben başlangıçta ile gelmişti cevabı belirten kod parçacığı olduğunu datetime2) .TotalMinutes) == 0)

Arka plan: linq sorgumun WHERE deyiminde (dolayısıyla tek liner), datetime1 ve datetime2'nin aynı olup olmadığını kontrol etmem gerekiyor. Ölçülen tarih değerleri, sorguda kullanılan diğer değerler için damga tarihleridir.

+0

Cevabımda düzenlendiği gibi, sadece dateTime1 == dateTime2 kullanın. Lütfen "tam olarak aynı" ile aynı şey olmadığı için "bir dakikaya kadar hassaslık" kullanarak kurtulmak için sorunuzu güncelleyin. –