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();