2012-08-06 92 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));