Итак, у меня проблема с запросом конкретных данных из моей базы данных. Допустим, у меня есть два контекста, содержащие объекты типа:
TrackPoint {
int Id;
double Latitude;
double Longitude;
int TrackId
{
Track {
int Id;
double MinLatitude;
double MaxLatitude;
double MinLongitude;
double MaxLongitude;
}
Каждый трек имеет определенное количество назначенных трекпоинтов. Я хочу запросить все трекпоинты, чьи треки пересекаются с другим треком (области построены из минимальных, максимальные значения перекрываются).
Я пытаюсь достичь этого только в одном запросе, так как производительность важна. Мне удалось сделать это с помощью запроса ниже, но время выполнения не так хорошо. Я уверен, что есть лучшие способы для этого. Буду признателен за любой совет.
var similarTrackPoints = Context.TrackPoints.Include("Track").Where(
tp =>
Context.Tracks.Where(t => t.Id == tp.TrackId).FirstOrDefault().MinLongitude <= track.MaxLongitude &&
Context.Tracks.Where(t => t.Id == tp.TrackId).FirstOrDefault().MaxLongitude >= track.MinLongitude &&
Context.Tracks.Where(t => t.Id == tp.TrackId).FirstOrDefault().MinLatitude <= track.MaxLatitude &&
Context.Tracks.Where(t => t.Id == tp.TrackId).FirstOrDefault().MaxLatitude >= track.MinLatitude)
.ToList();