C# linq表联查如何将多行结果拼接成一行

11 篇文章 0 订阅

let 子句(C# 参考)

在查询表达式中,存储子表达式的结果有时很有帮助,可在后续子句中使用。 可以通过 let 关键字执行此操作,该关键字创建一个新的范围变量并通过提供的表达式结果初始化该变量。 使用值进行初始化后,范围变量不能用于存储另一个值。 但是,如果范围变量持有可查询类型,则可以查询该变量。

这里用到了let,在封装一行记录里面,某个字段装多个查询结果,很实用

参考下文:

T2= firstUserNameArr, // firstCkUser这里会返回审核人姓名集合

var query = (from info in bus_InformationInfosList
                         join users in dbentities.Sys_UsersInfo on info.sender equals users.guid into u
                         from ut in u.DefaultIfEmpty()

                         join Class in dbentities.Sys_ClassInfo on info.stateguid equals Class.guid into c
                         from ct in c.DefaultIfEmpty()

                         join process in dbentities.Sys_ProcessControlInfo on info.processguid equals process.guid into p
                         from pt in p.DefaultIfEmpty()

                         join tempadopt in dbentities.Sys_ClassInfo on info.adoptchannel equals tempadopt.guid into _adopt
                         from adopt in _adopt.DefaultIfEmpty()

                         join department in dbentities.Sys_ClassInfo on info.departmentguid equals department.guid into _department
                         from x in _department.DefaultIfEmpty()

                             //转发审核部门
                         join dp2 in dbentities.Sys_ClassInfo on info.RelayDepartmentId equals dp2.guid.ToString() into td66
                         from z in td66.DefaultIfEmpty() 

                             //    //初审人-管理员审核人  
                             //join firstAd in dbentities.Bus_AuditInfo.Where(x => x.step == 1).OrderByDescending(x=>x.id).Take(1) on info.guid equals firstAd.infoguid into ad1
                             //from firstAd_t in ad1.DefaultIfEmpty()
                             //join admin in dbentities.Sys_AdminInfo on firstAd_t.Operator equals admin.guid into ad2
                             //from adm_t in ad2.DefaultIfEmpty()
                             //let firstCheck = firstuser.fullname + adm_t.fullname //初审人姓名

                             //初审人有可能是多个,firstCkUser这里会返回审核人姓名集合  2019-8-2 09:28:38 修改
                         let firstCkUser = (from aduit in dbentities.Bus_AuditInfo.Where(x => x.step == 1 && x.infoguid == info.guid)
                                            join admin in dbentities.Sys_AdminInfo on aduit.Operator equals admin.guid into ad2
                                            from adm_t in ad2.DefaultIfEmpty()
                                            join u2 in dbentities.Sys_UsersInfo on aduit.Operator equals u2.guid into tu12
                                            from u2t in tu12.DefaultIfEmpty()
                                            select new { id = aduit.id, ckUser = u2t.fullname + adm_t.fullname }).OrderBy(x => x.id)
                         let firstUserNameArr = from fk in firstCkUser select fk.ckUser
           
                         //终审人  2019-7-30 17:39:15 add
                         join sencond in dbentities.Bus_AuditInfo.Where(x => x.step == 2).OrderByDescending(x => x.id).Take(1) on info.guid equals sencond.infoguid into ad33
                         from sencond2 in ad33.DefaultIfEmpty()
                         join secondUser in dbentities.Sys_UsersInfo on sencond2.Operator equals secondUser.guid into ad14
                         from seconduser in ad14.DefaultIfEmpty()
                         
                         //终审人-管理员审核人    
                         join firstAd2 in dbentities.Bus_AuditInfo.Where(x => x.step == 2).OrderByDescending(x => x.id).Take(1) on info.guid equals firstAd2.infoguid into ad22
                         from firstAd_t2 in ad22.DefaultIfEmpty()
                         join admin2 in dbentities.Sys_AdminInfo on firstAd_t2.Operator equals admin2.guid into ad23
                         from adm_t2 in ad23.DefaultIfEmpty()

                         let finalCheck = seconduser.fullname + adm_t2.fullname //终审人姓名

                         select new InfoHelperClass
                         {
                             //Sender = users.account, 
                             Sender = ut.fullname,//报送人姓名
                             State = ct.title,// Class.title,
                             Stateguid = ct.guid, //Class.guid,
                             Step = pt.setting, //process.setting, 
                             Class = x,//部门
                             T1=z.title,//转发审核部门名称    
                             Data = info,
                             Adopt = adopt != null ? adopt.title : "暂未采纳",
                            // Firstuser = adm_t.fullname + u2t.fullname, //firstuser.fullname ?? adm_t.fullname,  //初审人姓名
                            T2= firstUserNameArr, // firstUserNameArr这里会返回审核人姓名集合
                             Seconduser = finalCheck, //终审人姓名
                             //设置默认分数及稿酬
                             Intranetscore = 0,
                             Newsscore = 0,
                             Cost = 0,
                             Adoptscore = 0
                         }).AsQueryable().AsNoTracking(); //AsNoTracking上下文不记录更改,不缓存

//查询第一页数据
 var list = await query.OrderByDescending(w => w.Data.id).Skip(0).Take(10).ToListAsync();
 
 

执行结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王焜棟琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值