我使用与其他人类似的方法将我的 LINQ 对象保存在我的 LINQ 数据提供程序中并返回 IQueryable 以允许过滤等。这适用于通过其 ID 或其他属性过滤简单对象,但我遇到了问题连接由其他子对象组成的表对象
//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 Position 对象,我返回一个 DTO Position,它由 User、OrgUnit 和 Role 组成(基础表是一个带有 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);
}
我完全不知道如何解决这个问题,因为我所有的谷歌结果似乎都是与直接使用生成的 LINQ 对象的人一起工作的
关于如何完成这项工作的任何想法,或者我在这里做错了什么?
谢谢