2014-07-01 64 views
0

當談到日期時,我有這個奇怪的問題。我試圖從使用日期的mongodb中獲得一個值。我知道發生了什麼,這就是爲什麼即使他們有相同的日期,什麼都沒有被返回。這裏的過程:即使日期時間值相同,Linq查詢也不會返回任何內容

我從數據庫中使用Id拉數據,現在我得到的記錄有一個日期。這個日期正在我的視圖中顯示。這是我如何做到的。

操作:

public JsonResult GetDateSentList(string id) 
{ 
    var data = ApiHelper<List<SomeModel>>.Get("SomeController/SomeAction?id=" + id); //I created a helper for requests 
    var distinctData = data.Select(a => a.DateOfEvent).Distinct().ToList(); 
    foreach (var item in distinctData) 
    { 
     var dateData = new SomeModel(); 
     dateData = data.FirstOrDefault(a => a.DateOfEvent == distinctData[i]); 
     dateData.DateOfEventString = dateData.DateOfEvent.ToString(@"MM-dd-yyyy hh:mm", new CultureInfo("en-US")); 
     dateData.DateOfEventExactString = dateData.DateOfEvent.ToString(@"MM-dd-yyyy hh:mm:ss tt", new CultureInfo("en-US")); 

    } 
    return Json(listDistinctData); 
} 

正如你可以看到這是由Ajax調用訪問和使用JS正在這裏顯示的數值(日期字符串)。

下面是我在這一點上所獲得的價值:2014年6月30日上午07時01分17秒(這是目前在HTML值的字符串)現在

,在按下按鈕,我將相同的日期字符串傳遞給動作,並且此動作向WebApi執行請求。

在WebApi上,字符串正在轉換爲dateTime(request.DateSent),在這一點上,我試圖獲得與第一部分相同的記錄,使用我在記錄中獲得的日期我想得到。

x= someService.All().FirstOrDefault(c => c.DateOfEvent == request.DateSent); 

我檢查了我想要得到的記錄,它有一個日期時間值2014年6月30日上午07時01分17秒,並且我用得到,我想有記錄的日期時間相同的DateTime值6/30/2014 7:01:17 AM。可悲的是,我一直得到一個空值。這裏發生的事情導致他們不平等,但我根本無法追查它。有任何想法嗎?謝謝!

+3

也許毫秒(沒有顯示)是不同的?此外,可能還有一些時區問題。 – Davio

+0

是這樣,所以我真的需要具有完全相同的值,直到每個細節。嗯,我怎麼能比較它們只是注意到這種格式(mm-dd-yy hh:mm:ss tt)? – ljpv14

+0

您正在使用'foreach'來獲取每個單獨的'item',但是您從不在循環中使用'item'變量!不應該在foreach中的第二行讀取'dateData = data.FirstOrDefault(a => a.DateOfEvent == item);'?如果不是,那麼'foreach'裏的變量'i'的值是多少? –

回答

1

你必須多想一想。午夜過去1毫秒與午夜前1毫秒相同嗎?如果是這樣,你應該計算差異,看它是否小於你選擇的某個時間間隔。如果沒有,你只應該比較你感興趣的領域(年,日,月等)。

你可以建立一個靜態的「截斷」功能,砍掉一切,但秒和更高:dt = dt.AddTicks(-dt.Ticks % 10000000);

這裏找到:Ignore milliseconds when comparing two datetimes

,並使用截斷日期比較。

請謹慎對待時區,但這可能不是問題。

相關問題