2012-08-06 90 views
0

排序的列表檢索下一個記錄日期考慮按日期時間

ID NAME DATE 
1 Mary 01-01-1901 
2 Mary 01-01-1901 
3 Mary 01-01-1901 
4 Mary 01-01-1901 
5 Lucy 01-01-1951 
6 Peter 01-01-1961 

以上的下列列表進行排序按日期列表。因此在數據庫中它不是這樣表示的。

我想在列表中獲取下一條記錄日期。我正在做的是,從數據庫中檢索 人員列表,然後按日期排序,然後按ID排序。發生了什麼事是 ID返回總是相同的:

下一條記錄 - > 2 - >下一條記錄 - > 1 - >下一條記錄2 等等......看起來我卡在第一個2條記錄。我使用LINQ到SQL

下面是我使用來實現這一

string newID = dx.Persons 
           .AsEnumerable() 
           .ToList() 
           .Where(
           x => x.DOB.CompareTo(newConvertedValue) == 0 && x.Id > currentID 
           || 
           x.DOB.CompareTo(newConvertedValue) > 0 && x.Id != currentID) 
           .OrderBy(x => x.DOB) 
           .ThenBy(x => x.Id) 
           .Select(x => x.Id.ToString(CultureInfo.InvariantCulture)) 
           .First(); 

對我來說是沒有意義的指定具備條件後,對列表進行排序的代碼,但是當我試圖修改 聲明我在順序異常中得到了一個no元素。

請注意,上述變量的含義如下: newConvertedvalue =當前顯示記錄的出生日期 currentID =當前顯示記錄的ID。

我試過使用不同的解決方案,但我似乎無法找到解決此問題的方法。

我已經實現了類似的方法來排序和獲取包含整數和字符串, 哪些工作正常(也感謝來自這個偉大的網站貢獻)的列的下一個記錄。 但是這個包含日期的列讓我很難過。

感謝您的閱讀。

+0

你爲什麼不只需將其取出。首先'()'和'使用.ToArray()'返回回一個字符串[]的ID的?然後,您可以簡單地使用foreach或for語句循環遍歷每個ID – Gavin 2012-08-06 09:44:39

+1

您知道'dx.Persons.AsEnumerable()'(此外,'.ToList()')表示您吸收了*整個*表的電線進入內存?你不應該在服務器*上做這個*嗎? – 2012-08-06 09:44:55

+0

我只需要從按日期排序的列表中獲取下一條記錄。我使用ID來確保如果日期相同,它將獲取下一個立即ID的記錄(通過確保它大於前一個ID)。據我所知,我不能循環遍歷每個id。 – DottoreM 2012-08-06 10:31:21

回答

0

使用

var Ids = dx.Persons 
      .AsEnumerable() 
      .ToList() 
      .Where(x => x.DOB.CompareTo(newConvertedValue) == 0 && x.Id > currentID 
           || 
       x.DOB.CompareTo(newConvertedValue) > 0 && x.Id != currentID) 
      .OrderBy(x => x.DOB) 
      .ThenBy(x => x.Id) 
      .Select(x => new { ID = Id, Date = DOB }) 
      .ToList(); 

Ids.ForEach(x => Console.WriteLine(x.ID));