linq语法 实现group by 分组(二)
作者:秋名
撰写时间:2020 年 6 月 07 日
需求:在宿舍里加上每个人的姓名。。安排。。。
public JsonResult Select_ChuangWei()
{
var listTitle = (from tbHB宿管宿舍床位 in myModel.HB宿管宿舍床位
join tbHB宿管宿舍 in myModel.HB宿管楼栋宿舍 on tbHB宿管宿舍床位.宿舍ID equals tbHB宿管宿舍.宿舍ID
join tbHB宿管床位类型与价格 in myModel.HB宿管床位类型与价格 on tbHB宿管宿舍.房型床位类别ID equals tbHB宿管床位类型与价格.房型床位类别ID
join tbG机构学生 in myModel.G机构学生 on tbHB宿管宿舍床位.分配机构学生ID equals tbG机构学生.机构学生ID
select new SuShe
{
床位ID=tbHB宿管宿舍床位.床位ID,
宿舍ID= tbHB宿管宿舍床位.宿舍ID,
房型床位类别ID=tbHB宿管宿舍.房型床位类别ID,
机构学生ID=tbG机构学生.机构学生ID,
姓名=tbG机构学生.姓名,
房型床位类别MC =tbHB宿管床位类型与价格.房型床位类别MC,
宿舍编码 = tbHB宿管宿舍.宿舍编码.Trim(),
床位编码=tbHB宿管宿舍床位.床位编码,
本床位本次起住时间 =tbHB宿管宿舍床位.本床位本次起住时间,
}).ToList();
var listBrand = (from tb in listTitle
group tb by tb.宿舍编码 into GrBrand
select new SuShe
{
床位ID = GrBrand.OrderByDescending(m => m.床位ID).FirstOrDefault().床位ID,
机构学生ID = GrBrand.OrderByDescending(m => m.分配机构学生ID).FirstOrDefault().机构学生ID,
宿舍编码 = GrBrand.OrderByDescending(m => m.宿舍ID).FirstOrDefault().宿舍编码.Trim(),
房型床位类别MC = GrBrand.OrderByDescending(m => m.房型床位类别ID).FirstOrDefault().房型床位类别MC,
学生名称MC = ArrayToString(GrBrand.Select(m=>m.姓名).ToArray()),
//将学生姓名放到数组里,调用ArrayToString方法将其循环
姓名 = GrBrand.Count(m => { return true; }).ToString(),
}).ToList();
return Json(listBrand, JsonRequestBehavior.AllowGet);
}
//定义方法循环group by里面学生姓名的数据。
private string ArrayToString(string[] array)
{
var str = "";
foreach (var item in array)
{
str += item==null?"":item.Trim()+ ",";
}
str=str.TrimEnd(',');//移除最后一个字符
return str;
}
}