Я использую аналогичный подход к другим в сохранении моих объектов 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
Есть мысли о том, как заставить это работать, или я делаю что-то совершенно не так?
Спасибо