В итоге я не использовал фильтры для своих сложных запросов. Вместо этого я добавил методы в хранилище для более сложных требований к запросам. Я чувствую, что это облегчит понимание и, следовательно, поддержку системы.
ользую подобный подход к другим в сохранении моих объектов LINQ в моем поставщике данных LINQ и возвращении IQueryable для разрешения фильтрации и т. Д. Это прекрасно работает для фильтрации простого объекта по его идентификатору или другому свойству, но у меня возникла проблема с объект таблицы соединения, состоящий из других дочерних объектов
//CoreDBDataContext db = coreDB;
public IQueryable<DTO.Position> GetPositions() {
return from p in coreDB.Positions
select new DTO.Position
{
DTO.User = new DTO.User(p.User.id,p.User.username, p.User.firstName,p.User.lastName,p.User.email,p.User.isActive),
DTO.Role = new DTO.Role(p.Role.id, p.Role.name, p.Role.isActive),
DTO.OrgUnit = new DTO.OrgUnit(p.OrgUnit.id,p.OrgUnit.name,p.OrgUnit.isActive)
};
CoreDB.Positions - это мой объект позиции Linq, и я возвращаю позицию DTO, которая состоит из пользователя, OrgUnit и роли (базовая таблица является таблицей соединений с UserID, RoleID и OrgUnitID)
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь добавить фильтр в Iqueryable, я получаю сообщение об ошибке SQL, в котором говорится, что для моего объекта DTO.User нет перевода.
public static IQueryable<Position> WithUserID(this IQueryable<Position> query, int userID)
{
return query.Where(p => p.User.ID == userID);
}
Я в полной растерянности относительно того, как решить эту проблему, так как все мои результаты в Google, похоже, относятся к людям, работающим непосредственно с созданными объектами LINQ.
Любая мысль о том, как сделать эту работу, или я делаю что-то здесь не так?
Спасибо