我在使用与其他人类似的方法,将我的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)
};
核心的DB.Positions是我的Linq职位对象,我返回一个由用户、组织单位和角色组成的DTO职位(基础表是一个带有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 对象直接相关的。
你有什么想法可以让这个工作起来,或者我做错了什么吗?
谢谢。