联表查询部分字段SQL问题 返回

SqlSugar 沟通中
2 125
该叫什么 lasmai 发布于1周前
悬赏:0 飞吻

    public class StudentEntity

    {

        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "學生ID")]

        public int Id { get; set; }


        [SugarColumn(ColumnDescription = "班級ID")]

        public int ClassId { get; set; }


        [Navigate(NavigateType.OneToOne, nameof(ClassId))]

        public ClassEntity Class { get; set; }


        [SugarColumn(ColumnDescription = "姓名", Length = 50)]

        public string Name { get; set; }


        [SugarColumn(ColumnDescription = "更新時間")]

        public DateTime UpdatedAt { get; set; }


        [SugarColumn(ColumnDescription = "更新人員")]

        public int UpdatedBy { get; set; }

    }

    public class ClassEntity

    {

        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "班級ID")]

        public int Id { get; set; }


        [SugarColumn(ColumnDescription = "班級名稱", Length = 50)]

        public string Name { get; set; }


        [SugarColumn(ColumnDescription = "班主任", Length = 50)]

        public string Teacher { get; set; }


        [SugarColumn(ColumnDescription = "學生人數")]

        public int StudentCount { get; set; } = 0;


        [SugarColumn(ColumnDescription = "更新時間")]

        public DateTime UpdatedAt { get; set; }


        [SugarColumn(ColumnDescription = "更新人員")]

        public int UpdatedBy { get; set; }

    }


使用LeftJoin只查询Class部分字段,SQL正常

await _studentRep.AsQueryable()

        .LeftJoin<ClassEntity>((s, c) => s.ClassId == c.Id)

        .Select((s, c) => new StudentEntity

        {

            Class = new ClassEntity { Teacher = c.Teacher },

        }, true)

        .ToListAsync()

SELECT `c`.`Teacher` AS `Class.Teacher` ,`s`.`Id` AS `Id` ,`s`.`ClassId` AS `ClassId` ,`s`.`Name` AS `Name` ,`s`.`UpdatedAt` AS `UpdatedAt` ,`s`.`UpdatedBy` AS `UpdatedBy` FROM `STUDENT` `s` Left JOIN `CLASS` `c` ON ( `s`.`ClassId` = `c`.`Id` )


使用IncludeLeftJoin只查询Class部分字段,SQL无法执行

await _studentRep.AsQueryable()

        .IncludeLeftJoin(x => x.Class)

        .Select(x => new StudentEntity

        {

            Class = new ClassEntity { Teacher = x.Class.Teacher },

        }, true)

        .ToListAsync()

SELECT x.Class.`pnv_Class`.`Teacher` AS `Class.Teacher` ,`x`.`Id` AS `Id` ,`x`.`ClassId` AS `ClassId` ,`x`.`Name` AS `Name` ,`x`.`UpdatedAt` AS `UpdatedAt` ,`x`.`UpdatedBy` AS `UpdatedBy` FROM `STUDENT` `x` Left JOIN `CLASS` `pnv_Class` ON `pnv_Class`.`Id`=`x`.`ClassId`


不知道这个是否可以优化?

热忱回答2

  • 太复杂的不支持。

     

    0 回复
  • 查询对象应该是  .Includes 不过支持=new xxx{导航}

    0 回复