SqlSugar并集查询如何导航 返回

并集查询如何导航?
例如:
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)
-
枫叶的祝福 VIP0
2024/3/29
目前发现,用SqlSugar 导航用BaseOrderDetail统一列 用UnionAll 合并三个表 提示列数量不同,代码检测没问题,用Linq 成功实现了先导航后UnionAll0 回复 -
枫叶的祝福 VIP0
2024/3/29SqlSugar如何能实现先 并集 再导航那?为了给前端数据目前先linq这么写,但是这样写有问题,都是先toList了
0 回复 -
fate sta VIP0
2024/3/29var 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 回复 -
枫叶的祝福 VIP0
2024/3/29// 表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();
目前就是无法导航,提示
,
并集之前必须先导航 然后把附表统一格式才行啊,到底该怎么做,上面是玩真改的代码0 回复 -
枫叶的祝福 VIP0
2024/3/29@fate sta:我发了代码帮我看一下
0 回复 -
fate sta VIP0
2024/3/29我上面发的你都没看
0 回复 -
fate sta VIP0
2024/3/29导航要到unionall后面操作
0 回复 -
枫叶的祝福 VIP0
2024/3/29@fate sta:我不就是按照你的改的吗?
0 回复 -
枫叶的祝福 VIP0
2024/3/29导航再unionall 后面操作,表不是一个, 子表不是一个表
0 回复 -
fate sta VIP0
2024/3/29并且UNIONALL之前不能有导航操作
0 回复 -
fate sta VIP0
2024/3/29完全没有按我说的改
0 回复 -
枫叶的祝福 VIP0
2024/3/29@fate sta:你看我上面代码修改了,如果这样修改,3个表 对应的 导航也是分别的三个表,下面合并以后如何去导航了?
0 回复 -
fate sta VIP0
2024/3/29@枫叶的祝福:上面3个Select成一个对象 ,并且select要有导航配置和主键
0 回复 -
fate sta VIP0
2024/3/29相同的对象就能union all了
0 回复 -
枫叶的祝福 VIP0
2024/3/29@fate sta:我union all 没问题,我就是 BaseOrder 类型的三个select,问题是合并以后,BaseOrder 还怎么去 导航了?合并以后 主键Guid都在一起了,但是需要导航的部分的数据在3个子表内,你意思不会是我用主键导航3次,哪个导航有数据用哪个把?
0 回复 -
枫叶的祝福 VIP0
2024/3/290 回复 -
枫叶的祝福 VIP0
2024/3/29@fate sta:之所以union all 之前我操作导航 是因为 3个表的子表也是3个,我也想把子表导航的也合成一个对象,这样前端比较友好
0 回复 -
枫叶的祝福 VIP0
2024/3/29@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 回复 -
枫叶的祝福 VIP0
2024/3/29好吧,虽然你一直理解不了我表达的意思,但是还是十分感谢,我就用linq直接合导航吧。
0 回复