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-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 条件之后对列表进行排序是没有意义的,但是当我尝试修改语句时,我得到了一个 no element in sequence 异常。

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

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

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

谢谢阅读。

4

1 回答 1

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)); 
于 2012-08-06T09:43:47.403 回答