У меня есть простая структура таблиц в SQL Server:
Одна таблица, в которой хранится список велосипедов (Bikes), и вторая таблица, в которой хранится исторический список владельцев велосипедов (Owners).
Используя Linq 2 SQL, я сгенерировал модель, которая дает мне сущность «Bike» с отношением 1 ко многим к «Owner», называемую «HistoricalOwners».
Пока все хорошо ...
Теперь у меня много запросов, где меня интересует текущий владелец. Текущий владелец является самой последней записью в таблице владельцев.
repo.Bikes().Where(b => b.HistoricalOwners.OrderByDescending(o => o.Date).First().Name == "Joe")
Это работает, но немного уродливо и не говорит, что я спрашиваю. Было бы неплохо создать свойство 'CurrentOwner' для моего объекта Bike и выполнить запрос к нему.
public Owner CurrentOwner
{
get
{
return HistoricalOwners.OrderByDescending(o => o.Date).First();
}
}
Тогда я мог бы запросить вот так:
repo.Bikes().Where(b => b.CurrentOwner.Name == "Joe")
Это компилируется, но из курсов во время выполнения это не с:
У члена CurrentOwner нет поддерживаемого перевода в SQL.
Что имеет смысл.
Кто-нибудь знает, как я мог бы создать CurrentOwner таким образом, чтобы этот запрос работал?
Я провел некоторые исследования, чтобы заставить CurrentOwner возвращать дерево выражений вместо экземпляра, но я так и не получил того места, которое бы меня по-настоящему обрадовало.
Тогда я подумал, могу ли я добавить дополнительное отношение к моему репозиторию linq 2 sql для CurrentOwner и ограничить его соотношением один к одному. Но я не могу сделать это с linq 2 sql. Я думаю, что могу сделать это с сущностями Linq 2, но сейчас это не вариант.
У кого-нибудь есть идеи, как я могу заставить эту работу работать?
Заранее спасибо,
RMK