모든 차량이 등록 된 테이블과 각 등록 된 차량에 대해 수백만 개의 핑이있는 테이블이 있습니다.LINQ 목록을 사용하여 DB에서 마지막 고유 레코드 선택
LINQ QUERY를 사용하여 지난 30 분 동안 ping을 보낸 각 차량에서 마지막 ping을 선택하려고합니다. "for each"아이디어를 통해 아래 코드를 작성했지만 최선의 방법인지는 확실하지 않습니다.
단일 라인을 사용하여 이것을 선택하는 더 좋은 방법이 있는지 알고 싶습니다. 내가 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. 도움 주셔서 감사합니다. 이미지가 표시되면 https://postimg.org/image/pc3agbm75/, LINQ는 전체 데이터베이스를 선택한 다음 필터를 적용합니다. 현재 약 63884 개의 행이 있기 때문에 약 7 초가 걸립니다. 를 위해 각각을 사용하면 전체 데이터를 선택하는 데 1 초가 걸립니다. 어쨌든 각각에 대해 마지막 ping 만 선택 하시겠습니까? – Canela