У меня есть ситуация, когда у меня есть таблица записей, к которой я буду запрашивать, но в некоторых случаях у меня будет дополнительная информация.
Например, если у меня есть таблица people
, я хочу иметь возможность поиска по имени, но я также хочу сохранить некоторые координаты и поиск на основе их местоположения, но также выставить это расстояние в модели объекта , Например, предположим, что моя таблица people
выглядит примерно так:
PersonId int
Name nvarchar(100)
Address nvarchar(100)
Latitude float(10,6)
Longitude float(10,6)
И класс сущности определяется так:
public class Person
{
public int PersonId { get; set; }
public sting Name { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
}
Тогда я могу легко найти человека по имени, используя:
var people = from p in myDb.People where p.Name.Contains("joe");
Теперь у меня есть пользовательская функция с именем CalculateDistance
, которую я создал для обработки вычислений этого расстояния. И поэтому мой SQL будет выглядеть примерно так:
String sql = "SELECT *, dbo.CalculateDistance(" + location.X + ", " + location.Y + ", Latitude, Longitude) AS Distance FROM people ORDER BY Distance
Как мне представить это в коде? Я пытался добавить свойство, подобное этому, в класс:
public virtual float Distance { get; set; }
Но тогда запросы на имя не будут выполнены, поскольку столбец Distance отсутствует. Я также пытался расширить класс Person:
public class PersonWithDistance: Person {
public float Distance { get; set; }
}
Но это вызвало еще больше проблем с тем, как генерируются отображения.
Как правильно реализовать что-то подобное? Нужно ли создавать отдельный отдельный класс для результатов запроса расстояния?