私はすべての車両が登録されているテーブルと、登録されている各車両に何百万というpingがあるテーブルを持っています。LINQリストを使ってDBからLast&Uniqueレコードを選択
LINQ QUERYを使用して過去30分間にpingを送信した各車両から最後のpingを選択しようとしています。私は、それぞれのアイデアごとに以下のコードを実行しましたが、それが最善の方法であるかどうかはわかりません。
これを1行で選択するより良い方法があるかどうかを知りたいですか?私はvehicle_fleetNumberによってそれらをグループ化することができますが、TAKE()が最終結果を制限しているので、適切な結果を得ることができませんでした。
var timeRestriction = DateTime.UtcNow.AddMinutes(-30);
var x = _db.Vehicles.Where(r=> r.isActive.Equals(true) && r.helperLastPing > timeRestriction);
foreach (var vehicle in x)
{
var firstOrDefault = _db.Tracks.OrderByDescending(r => r.collectedOn)
.FirstOrDefault(r => r.vehicle_fleetNumber.Equals(vehicle.fleetNumber));
}
return View();
はい、あなたは両方のテーブルを結合し、GroupBy
を使用してデータベースにそれを行う必要があり、
こんにちは@Tim Schmelter。 ご協力いただきありがとうございます。 イメージが表示されている場合は、LINQはデータベース全体を選択してからフィルタを適用します。それは約7秒を取っている、そして、私は63884行しか今のところ持っていないからです。それぞれを使用すると、データ全体を選択するのに1秒かかります。 最後のpingだけを選択する方法はありますか? – Canela