linq-to-sql - Linq to SQL DTO 和复合对象

标签 linq-to-sql dto separation-of-concerns

我正在使用与其他人类似的方法将我的 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 位置对象,我正在返回一个由用户、组织单位和角色组成的 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);
    }

我完全不知道如何解决这个问题,因为我所有的谷歌结果似乎都是直接使用生成的 LINQ 对象的人

关于如何使这项工作有任何想法,或者我在这里做错了什么?

谢谢

最佳答案

我已经能够使用类似的方法成功地工作:

var courses = from c in Map(origCourses)
where !expiredStatuses.Contains(c.Status)
select c;

map 有:
    select new UserCourseListItem
    {
        CourseID = c.CourseID,
        CourseName = cm.CourseName,
        CourseType = c.CourseType.Value
        ...

如何尝试使用这种类型的初始化(而不是构造函数)。

附言。这是工作应用程序的一部分,并且 expiredStatuses 甚至与复杂的表达式有关。

更新 1:这与上述场景类似,因为:
  • Map 返回一个 IQueryable,它是一个 POCO 对象。
  • 在调用返回带有 POCO 对象的 IQueryable 的 Map 方法后,我正在对其应用过滤器。
  • 关于linq-to-sql - Linq to SQL DTO 和复合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611792/

    相关文章:

    c# - linq在groupby之后排序分组元素

    c# - 在单个元素级别应用 Linq Func<T, TResult> 键选择器

    java - 将当前时区设置为@JsonFormat 时区值

    java - 如何使用oop和soc实现从数据库读取默认对象设置

    sql-server - 如何从 DDD 解决方案中的 WebApplication 项目中删除 EntityFramework.SqlServer 引用

    c# - LINQ 一对多,3 级深度问题

    c# - Linq to sql - 数据库不会更新

    Java 将变量传递给映射的 DTO 方法?

    c# - DTO 是否应该包含其他 DTO,或者这是否构成 'behaviour'?

    business-logic - 将业务层与数据层分离时在哪里对实体进行限制