Сегодня утром я ломал голову над проблемой LinqToSQL. Я попытаюсь обобщить приведенный ниже сокращенный пример, чтобы объяснить мою точку зрения.
У меня есть две таблицы БД:
table Parent
{
ParentId
}
table Child
{
ChildId
ParentId [FK]
Name
Age
}
Они имеют эквивалентные классы LinqToSQL в моем проекте, однако я написал два пользовательских класса моделей, которые я хочу использовать в своем интерфейсе вместо использования классов LinqToSQL.
Мой доступ к данным из внешнего интерфейса проходит через класс обслуживания, который, в свою очередь, вызывает класс хранилища, который запрашивает данные через linq.
На уровне хранилища я возвращаю IQueryable по:
return from data in _data.Children
select new CustomModel.Child
{
ChildId = data.ChildId,
ParentId = date.ParentId
};
Мой уровень обслуживания затем добавляет дополнительное ограничение запроса по родителю перед возвратом списка дочерних элементов для этого родителя.
return _repository.GetAllChildren().Where(c => c.Parent.ParentId == parentId).ToList();
Итак, на данный момент, я получаю, что метод не поддерживает ошибку перевода в sql, когда я запускаю все, так как свойство c.Parent моей пользовательской модели не может быть преобразовано. [Свойство c.Parent является ссылкой на объект в связанном классе родительской модели.]
Это все имеет смысл, поэтому мой вопрос таков:
Можете ли вы предоставить процесс запроса
с некоторыми правилами, которые будут преобразовывать
выражение предиката в правильное
кусок SQL для запуска в базе данных
и, следовательно, не вызвать ошибку?
Я до сих пор не проделал большую работу с linq, так что простите мне отсутствие опыта, если я не объяснил это достаточно хорошо.
Кроме того, для тех, кто комментирует мой выбор архитектуры, я изменил его, чтобы обойти эту проблему, и я просто играю с идеями на данном этапе. Я хотел бы знать, есть ли ответ для дальнейшего использования.
Большое спасибо, если кто-нибудь может помочь.