根据某一字段对数据进行分组统计
如何根据某一字段对数据进行分组统计?
在项目要求中要求实现此页面功能
在这里要求统计公司20GP,40GP,40HC的柜量和TEU情况,
下面是我实现此功能的页面
啊啊,页面设计不好看,虽然实现的内容与要求的有些许差异,但是分组查询统计的功能是实现了
下面是我经过思考编写的代码(在这里引用了BsgridPage)
// An highlighted block
public ActionResult Statistics(BsgridPage bsgridPage, int EntrustID, string WorkNumber, string StarDate, string EndDate,
int PretendHarborID, int PurposeID, string ShipID, string ShipNext)//柜型柜量统计
{
#region
try
{
var lisqtem = (from tbSetBox in myModels.SYS_Setbox
//group by分组
//group tbSetBox by tbSetBox.ShipcompanyID into tbShipcommanpay
//表示对tbSetBox按ShipcompanyID字段归类,其结果命名为tbShipcommanpay
//一旦重新命名,tbSetBox的作用域就结束了,所以,最后select时,
group tbSetBox by tbSetBox.ShipcompanyID into tbShipcommanpay
select new
{
ShipcompanyID = tbShipcommanpay.Key,//接口提供一个属性 Key ,返回进行分组的关键字段的值
TEU = tbShipcommanpay.Select(m => m.TEU),
Score20GP = tbShipcommanpay.Where(m => m.Boxmodel == "20GP"),
Score40GP = tbShipcommanpay.Where(m => m.Boxmodel == "40GP"),
Score40HC = tbShipcommanpay.Where(m => m.Boxmodel == "40HC"),
}).ToList();
var linqteml = (from tbSetBox in lisqtem
join tbShipcompany in myModels.SYS_Shipcompany on tbSetBox.ShipcompanyID equals tbShipcompany.ShipcompanyID
join tbShip in myModels.SYS_Ship on tbShipcompany.ShipID equals tbShip.ShipID
join tbWorkNumber in myModels.SYS_WorkNumber on tbShip.WorkNumberID equals tbWorkNumber.WorkNumberID
join tbEntrust in myModels.SYS_Entrust on tbShip.EntrustID equals tbEntrust.EntrustID
orderby tbSetBox.ShipcompanyID descending
select new SetBoxVo
{
ShipcompanyID = tbShipcompany.ShipcompanyID,
ShipName = tbShip.ShipName,
ShipcompanyMC = tbShipcompany.ShipcompanyMC,
Score20GP = tbSetBox.Score20GP.Count(),
Score40GP = tbSetBox.Score40GP.Count(),
Score40HC = tbSetBox.Score40HC.Count(),
TEU = tbSetBox.TEU.Count(),
Date = tbShip.DateShip.ToString(),
DateShip = tbShip.DateShip,
WorkNumber = tbWorkNumber.WorkNumber,
EntrustMC = tbEntrust.EntrustMC,
ShipNext = tbShip.ShipNext,
EntrustID = tbEntrust.EntrustID,
ShipID = tbShip.ShipID,
}).ToList();
if (EntrustID > 0)
{
linqteml = linqteml.Where(m => m.EntrustID == EntrustID).ToList();
}
if (PretendHarborID > 0)
{
linqteml = linqteml.Where(m => m.PretendHarborID == PretendHarborID).ToList();
}
if (!string.IsNullOrEmpty(ShipID))
{
linqteml = linqteml.Where(m => m.ShipName.Contains(ShipID)).ToList();
}
if (PurposeID > 0)
{
linqteml = linqteml.Where(m => m.PurposeID == PurposeID).ToList();
}
if (!string.IsNullOrEmpty(WorkNumber))
{
linqteml = linqteml.Where(m => m.WorkNumber.Contains(WorkNumber)).ToList();
}
if (!string.IsNullOrEmpty(ShipNext))
{
linqteml = linqteml.Where(m => m.ShipNext.Contains(ShipNext)).ToList();
}
if (!string.IsNullOrEmpty(StarDate) && !string.IsNullOrEmpty(EndDate))
{
DateTime starDate = Convert.ToDateTime(StarDate);
DateTime endDate = Convert.ToDateTime(EndDate);
linqteml = linqteml.Where(m => m.DateShip >= starDate && m.DateShip <= endDate).ToList();
}
int totals = linqteml.Count();
List<SetBoxVo> listSet = linqteml
.Skip(bsgridPage.GetStartIndex())
.Take(bsgridPage.pageSize).ToList();
Bsgrid<SetBoxVo> bsgrid = new Bsgrid<SetBoxVo>
{
success = true,
totalRows = totals,
curPage = bsgridPage.curPage,
data = listSet
};
return Json(bsgrid, JsonRequestBehavior.AllowGet);
#endregion
}
catch (Exception e)
{
Console.WriteLine(e);
}
return Json("", JsonRequestBehavior.AllowGet);
}