0

LINQ クエリが正しく機能しない

私は次のようにしたい、特定の条件で訪問者テーブルから訪問者レコードにアクセスしたい

その場所を訪れた最後の5人の訪問者のリストを取得したい

次のクエリを使用して結果を取得していますが、distinct() に関しては問題が発生し、distinct() は既存の順序を破棄します。

var result = ObjPlace.visitorlist
.where(visitpalce => visitplace.name == Placename)
.OrderByDescending(visitor => visitor.visitdate)
.Select(x => x.visitorID)
.Distinct()
.take(5);

私がdistinct()を削除すると、完全に機能します...

どうすれば同じことを達成できますか?

4

3 に答える 3

2
 var query = from v in ObjPlace.visitorlist
             where v.name == Placename
             group v by v.visitorID into g
             let lastVisit = g.Max(x => x.visitdate)
             orderby lastVisit descending
             select g.First(v => v.visitdate == lastVisit);

これにより、前回の訪問でオーダーされたエンティティの個別のリストが返されます。次に、それらの上位 5 つを取り上げます。

query.Take(5)

1 人の訪問者が上位 5 つのレコードに複数の訪問を持っている可能性があるため、ここでグループ化する必要があります。したがって、最初に地名でリストをフィルタリングします。次に、すべての訪問を訪問者別にグループ化します。つまり、訪問のグループがあります。各グループで、訪問者の最終訪問時間を定義し、グループ内の最初の訪問エンティティを選択します。これは、その訪問者の最終訪問日と同じ時間です。

于 2012-05-18T13:00:14.727 に答える
0

取得しようとしている個別のデータは何ですか?

オブジェクトが IEquatable を実装している場合、すべてのフィールドが比較されます。つまり、2 つのオブジェクトの日付が異なる場合は区別されますが、他のフィールドが異なる場合はオブジェクトが異なると見なされます。

入力データ、取得した出力、および期待される出力のサンプルを投稿できますか?

于 2012-05-18T12:58:06.940 に答える
0

順序を変更してみてください:

var result = ObjPlace.visitorlist
               .Where(visitpalce => visitplace.name == Placename)
               .Distinct()
               .OrderByDescending(visitor => visitor.visitdate)
               .Select(x => x.visitorID)
               .Take(5);
于 2012-05-18T12:16:54.963 に答える