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

上記は日付順のリストです。したがって、データベースではそのように表されません。

リストの次のレコードを BY DATE に取得しようとしています。私がやっていることは、データベースから人のリストを取得し、次に日付、次に 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 条件を指定した後にリストを並べ替えるのは意味がありませんが、ステートメントを変更しようとすると、要素がシーケンス内にないという例外が発生しました。

上記の変数には次の意味があることに注意してください。 newConvertedvalue = 現在表示されているレコードの生年月日 currentID = 現在表示されているレコードの ID。

さまざまなソリューションを使用してみましたが、これを解決する方法が見つからないようです。

整数と文字列を含む列の次のレコードを並べ替えてフェッチする同様の方法を実装しましたが、これは正常に機能しています (この素晴らしい Web サイトからの貢献にも感謝します)。しかし、日付を含むこの列には苦労しています。

読んでくれてありがとう。

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 に答える