检索DateTime排序的列表中的下一条记录

时间:2012-08-06 09:33:39

标签: c# asp.net linq linq-to-sql

考虑以下日期列表

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

以上是按日期排序的列表。因此,在数据库中,它不是这样表示的。

我正在尝试获取列表BY DATE中的下一条记录。我正在做的是,检索列表 来自数据库的人员,然后按日期排序,然后按ID排序。发生了什么事情 返回的ID始终相同:

下一个记录 - > 2 - >下一个记录 - > 1 - >下一条记录2 等等......似乎我被困在前两个记录中。我正在使用LINQ-to-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();

对我来说,在指定Where条件之后订购列表是没有意义的,但是当我尝试修改时 声明我在序列异常中得到了一个无元素。

请注意,上述变量具有以下含义: newConvertedvalue =当前显示记录的出生日期 currentID =当前显示记录的ID。

我尝试过使用不同的解决方案,但似乎无法找到解决此问题的方法。

我已经实现了类似的方法来为包含整数和字符串的列排序和获取下一条记录, 工作正常(也感谢这个伟大的网站的贡献)。 但是这个包含日期的专栏让我很难过。

感谢阅读。

1 个答案:

答案 0 :(得分: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));