linq语法 实现group by 分组(三)
作者:秋名
撰写时间:2020 年 6 月 07 日
技术要点:一个宿舍对应多个床位,所以这个分组直接用在表上面GroupBy(m => m.宿舍ID) ,查询.Max最大值。select就可以进行兰姆达表达式。
public ActionResult Demo_Select(int loudonID ,int loucenID) {
//List<Dictionary<string, object>> jsonlist = new List<Dictionary<string, object>>();
//List<MenuTree> treeList = new List<MenuTree>();
//var CS = 1;
List<MenuTree> list1 = (from HB宿管楼栋宿舍 in myModel.HB宿管楼栋宿舍
join HB宿管宿舍床位 in myModel.HB宿管宿舍床位.GroupBy(m => m.宿舍ID) on HB宿管楼栋宿舍.宿舍ID equals HB宿管宿舍床位.Max(m => m.宿舍ID)
//where HB宿管楼栋宿舍.宿舍楼栋ID== loudonID && HB宿管楼栋宿舍.宿舍楼层ID==loucenID
select new MenuTree
{
SonID = 0 - HB宿管楼栋宿舍.宿舍ID,
LouDong=HB宿管楼栋宿舍.宿舍楼栋ID,
LouCen=HB宿管楼栋宿舍.宿舍楼层ID,
NodeName = HB宿管楼栋宿舍.宿舍编码 + "宿舍",
NodeName1 ="共" + HB宿管宿舍床位.Where(m => m.床位编码 != null).Count() +"张床位"+" - "+"已入住"+ HB宿管宿舍床位.Where(m=>m.分配机构学生ID!=null).Count()+"人",
ParentID =0
}).ToList();
if (loudonID != 0)
{
list1 = list1.Where(m => m.LouDong == loudonID).ToList();
}
if (loucenID != 0)
{
list1 = list1.Where(m => m.LouCen == loucenID).ToList();
}
List<MenuTree> list2 = (from HB宿管宿舍床位 in myModel.HB宿管宿舍床位
join tb in myModel.G机构学生 on HB宿管宿舍床位.分配机构学生ID equals tb.机构学生ID
into gj from tb宿舍床位机构学生 in gj.DefaultIfEmpty()
select new MenuTree
{
SonID = HB宿管宿舍床位.床位ID,
NodeName = HB宿管宿舍床位.床位编码+"号床",
ParentID=0- HB宿管宿舍床位.宿舍ID,
NodeName1= tb宿舍床位机构学生.姓名==null?"(暂空)": tb宿舍床位机构学生.姓名,
}).ToList();
//lsit 底层是数组,
list1.AddRange(list2);
//[1,2,3,4,5,7,8,9],
//LinkedList<>//如果对数据中间取值和删值操作
// Dictionary<>//键值对(多个值,name不重复)
//HashSet<int>//一个值,不重复
///HashSet<int> vs = new HashSet<int>();
//计算总行数
int totalRow = list1.Count();
//分页查询SYS_Academe的数据
//!!!Skip Take使用前必须使用orderby
List<MenuTree> list = list1.ToList();
//封装layui table数据
LayuiTableData<MenuTree> layuiTableData = new LayuiTableData<MenuTree>()
{
count = totalRow,
data = list,
};
return Json(layuiTableData, JsonRequestBehavior.AllowGet);
}