SqlSugar并集查询如何导航 返回

SqlSugar 处理完成
19 611

并集查询如何导航?

例如:
var q1 = db.Queryable<Table1>().Select(it => new { id = it.Id });
var q2 = db.Queryable<Table2>().Select(it => new { id = it.Id });
var q3 = db.Queryable<Table3>().Select(it => new { id = it.Id });
var unionResult = db.UnionAll(q1, q2, q3).ToList();

如上,三个表Table1,Table2,Table3 ,直接并集查询没问题,但是我需要导航,我试过UnionAll之前 include 先导航再并集不能用,但是如果先并集后何导航要怎么操作?问题是s三个表的附表都不是一个表啊Detail1,Detail2,Detail3

热忱回答19

  • image.png
    目前发现,用SqlSugar 导航用BaseOrderDetail统一列 用UnionAll 合并三个表 提示列数量不同,代码检测没问题,用Linq 成功实现了先导航后UnionAll 

    0 回复
  • SqlSugar如何能实现先 并集 再导航那?为了给前端数据目前先linq这么写,但是这样写有问题,都是先toList了

    0 回复
  • fate sta fate sta VIP0
    2024/3/29

    var q1 = db.Queryable<Table1>();//要查全
    var q2 = db.Queryable<Table2>()
    var q3 = db.Queryable<Table3>();
    var unionResult = db.UnionAll(q1, q2, q3).Includes(x=>x.Items).select(it=>new {

        it=it.Id,

        items=it.Items

     }).ToList();

    0 回复
  • // 表1
    var procureReturnList = SmartFactory
        .Queryable<ProcureReturn>()
        .Where(a => a.IsDelete == false)
        .Select(a => new BaseOrder
        {
            Id = a.Id,
            Guid = a.Guid,
            Number = a.Number,
            AddTime = a.AddTime,
            CreatorGuid = a.CreatorGuid,
            CreatorName = a.CreatorName,
            CreatorDepartmentGuid = a.CreatorDepartmentGuid,
            CreatorDepartmentName = a.CreatorDepartmentName,
            Description = a.Description,
            FilesList = a.FilesList,
            OrderType = 2,
            State = a.State,
            OperateType = 1,
            AuditorGuid = a.AuditorGuid,
            AuditorName = a.AuditorName,
            AuditorTime = a.AuditorTime,
            SourceOrderGuid = a.ProcureOrderGuid,
            SourceOrderNumber = ""
        });
    // 表2
    var procureWarehousingList = SmartFactory
        .Queryable<ProcureWarehousing>()
        .Where(a => a.IsDelete == false)
        .Select(a => new BaseOrder
        {
            Id = a.Id,
            Guid = a.Guid,
            Number = a.Number,
            AddTime = a.AddTime,
            CreatorGuid = a.CreatorGuid,
            CreatorName = a.CreatorName,
            CreatorDepartmentGuid = a.CreatorDepartmentGuid,
            CreatorDepartmentName = a.CreatorDepartmentName,
            Description = a.Description,
            FilesList = a.FilesList,
            OrderType = 2,
            State = a.AuditorState,
            OperateType = 0,
            AuditorGuid = a.AuditorGuid,
            AuditorName = a.AuditorName,
            AuditorTime = a.AuditorTime,
            SourceOrderGuid = a.ProcureOrderGuid,
            SourceOrderNumber = ""
        });
    // 表3
    var goodsOrderList = SmartFactory
        .Queryable<GoodsOrder>()
        .Where(a => a.DelSign == 0)
        .Select(a => new BaseOrder
        {
            Id = a.Id,
            Guid = a.Guid,
            Number = a.Number,
            AddTime = a.AddTime,
            CreatorGuid = a.CreatorGuid,
            CreatorName = a.CreatorName,
            CreatorDepartmentGuid = a.CreatorDepartmentGuid,
            CreatorDepartmentName = a.CreatorDepartmentName,
            Description = a.Description,
            FilesList = a.FilesList,
            OrderType = a.OrderType,
            State = a.State,
            OperateType = a.OperateType,
            AuditorGuid = a.AuditorGuid,
            AuditorName = a.AuditorName,
            AuditorTime = a.AuditorTime,
            SourceOrderGuid = a.SourceOrderGuid,
            SourceOrderNumber = a.SourceOrderNumber
        });
    // 并集
    var querys = SmartFactory.UnionAll(procureReturnList, procureWarehousingList, goodsOrderList).Includes(it=>it=>BaseOrderDetailList).Select(it => new
    {
        Id = it.Id,
        Guid = it.Guid,
        Number = it.Number,
        AddTime = it.AddTime,
        CreatorGuid = it.CreatorGuid,
        CreatorName = it.CreatorName,
        CreatorDepartmentGuid = it.CreatorDepartmentGuid,
        CreatorDepartmentName = it.CreatorDepartmentName,
        Description = it.Description,
        FilesList = it.FilesList,
        OrderType = it.OrderType,
        State = it.State,
        OperateType = it.OperateType,
        AuditorGuid = it.AuditorGuid,
        AuditorName = it.AuditorName,
        AuditorTime = it.AuditorTime,
        SourceOrderGuid = it.SourceOrderGuid,
        SourceOrderNumber = it.SourceOrderNumber,
        BaseOrderDetailList = it.BaseOrderDetailList  // 前面不导航统一格式,这里如何导航?3个表的子表都不同
    }).ToList();

    目前就是无法导航,提示8[6N38)]FU23X~80M3%MVYN.png
    并集之前必须先导航 然后把附表统一格式才行啊,到底该怎么做,上面是玩真改的代码

    0 回复
  • @fate sta:我发了代码帮我看一下

    0 回复
  • fate sta fate sta VIP0
    2024/3/29

     我上面发的你都没看

    0 回复
  • fate sta fate sta VIP0
    2024/3/29

    导航要到unionall后面操作

    0 回复
  • @fate sta:我不就是按照你的改的吗?

    0 回复
  • 导航再unionall 后面操作,表不是一个, 子表不是一个表

    0 回复
  • fate sta fate sta VIP0
    2024/3/29

    并且UNIONALL之前不能有导航操作



    0 回复
  • fate sta fate sta VIP0
    2024/3/29

    完全没有按我说的改

    0 回复
  • @fate sta:你看我上面代码修改了,如果这样修改,3个表 对应的 导航也是分别的三个表,下面合并以后如何去导航了?

    0 回复
  • fate sta fate sta VIP0
    2024/3/29

    @枫叶的祝福:上面3个Select成一个对象  ,并且select要有导航配置和主键

    0 回复
  • fate sta fate sta VIP0
    2024/3/29

    相同的对象就能union all了

    0 回复
  • @fate sta:我union all 没问题,我就是 BaseOrder 类型的三个select,问题是合并以后,BaseOrder 还怎么去 导航了?合并以后 主键Guid都在一起了,但是需要导航的部分的数据在3个子表内,你意思不会是我用主键导航3次,哪个导航有数据用哪个把?

    0 回复
  • image.png

    0 回复
  • @fate sta:之所以union all 之前我操作导航 是因为 3个表的子表也是3个,我也想把子表导航的也合成一个对象,这样前端比较友好

    0 回复
  • @fate sta

    那就只能写成这样了,导航部分就不是一个统一对象了
    var q1 = db.Queryable<Table1>();//要查全
    var q2 = db.Queryable<Table2>()
    var q3 = db.Queryable<Table3>();
    var unionResult = db.UnionAll(q1, q2, q3)

    .Includes(x=>x.Items1)

    .Includes(x=>x.Items2)

    .Includes(x=>x.Items3)

    .select(it=>new {

        it=it.Id,

        items1=it.Items1,

        items2=it.Items2,

        items3=it.Items3

     }).ToList();


    0 回复
  • 好吧,虽然你一直理解不了我表达的意思,但是还是十分感谢,我就用linq直接合导航吧。

    0 回复