В итоге я не использовал фильтры для своих сложных запросов. Вместо этого я добавил методы в хранилище для более сложных требований к запросам. Я чувствую, что это облегчит понимание и, следовательно, поддержку системы.

ользую подобный подход к другим в сохранении моих объектов 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.

Любая мысль о том, как сделать эту работу, или я делаю что-то здесь не так?

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос