导航查询,一对多或一对一,能用子表进行查询吗?如何同时用LeftJoin 、ToPageList? 返回

SqlSugar
9 144
该叫什么 shuofang 发布于1周前
悬赏:0 飞吻

1、例如 StudentA 里包含了子表 Books,可以通过 Books.Name 进行搜索StudentA吗?

2、如何同时用LeftJoin 、ToPageList?


热忱回答9

  • 你把实体写全

    0 回复
  • public class StudentA
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int StudentId { getset; }
        public string Name { getset; }
        public int SchoolId { getset; }
        [Navigate(NavigateType.OneToMany, nameof(BookA.studenId))]//BookA表中的studenId
        public List<BookA> Books { getset; }//注意禁止给books手动赋值
     
    }
    public class BookA
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int BookId { getset; }
        public string Name { getset; }
        public int studenId { getset; }

    }

    public class BookB
    {
         public int BookId { getset; }
        public string Name { getset; }
        public int studenId { getset; }

    }





    var c = db.Queryable<StudentA>()

              .Includes(o =>o.Books)

              .LeftJoin<BookB>((t1, t2) => t1.id == t2.BookId)

              .Select((t1, t2) => new view()

              {

                  BookId = t1.Id,

                  BookName = t2.Name,

              })

              .ToPageList(++pageNumber, limit, ref total);


    以上伪代码写法错误,应该怎么写?

    0 回复
  • var list = db.Queryable<StudentA>()
              .LeftJoin<BookB>((t1, t2) => t1.id == t2.BookId)
              .Select((t1, t2) => new view()
              {
                  BookId = t1.Id,
                  BookName = t2.Name,
                  StudenId =t1.studenId 
              })
              .ToPageList(++pageNumber, limit, ref total);
              
    db.ThenMapper(list, stu =>
    {
      / 
      stu.Books=db.Queryable<BookA>().SetContext(scl=>scl.StudenId ,()=>stu.StudenId ,stu).FirstOrDefault();
    });


    0 回复
  • @fate sta:按照上面的方法尝试,提示“给定关键字不在字典中。”

    代码里不是用的上述实体类,但ThenMappe里的对应属性是对的,核对了基本代码应该没问题.dll已升到5.0.7.8


    Chargepoint:

    image.png

    image.png

    0 回复
  • var db=this.sugardb; 保证是同一个DB

    0 回复
  • var c = db.Queryable<StudentA>()
              .Includes(o =>o.Books)
              .Includes(o =>o.Book2)
              .Skip(0)
              .Take(10)
              .ToList(it=> new view()
              {
                  BookId = t1.Id,
                  BookName = t1.Book2.Name,
              }) ;

    这样好像更简单

    0 回复
  • 在加一个一对一导航

    0 回复
  • 搞定了,不是用一个DB导致的。多谢!

    0 回复
  • 在SetContext里能联表查询吗?

    比如:

                db.ThenMapper(cpList, cpr =>

                {

                    cpr.driver = db.Queryable<Driver>()

                                   .LeftJoin<DriverChargepoint>((t1, t2) => t1.Id == t2.DriverId)

                                   .SetContext((t1) => t1.Id, () => cpr.chargeBoxIdentity, cpr).FirstOrDefault();

                });

    SetContext 里的条件有问题,t1.Id 是主表,希望是子表中的字段

    0 回复