示例, linq分组

public class HIS_CLIREGISTER : BaseModel
{

private String _FBCODE;
[StringLength(8)]
/// <summary>
/// 费别
/// </summary>
public String FBCODE
{
get { return _FBCODE; }
set
{
if (_FBCODE != value && RowState == RowStateFlags.ROW_Original)
{
RowState = RowStateFlags.ROW_Edited;
}
_FBCODE = value;
}
}

private String _USERNAME;
[StringLength(20)]
/// <summary>
/// 操作人
/// </summary>
public String USERNAME
{
get { return _USERNAME; }
set
{
if (_USERNAME != value && RowState == RowStateFlags.ROW_Original)
{
RowState = RowStateFlags.ROW_Edited;
}
_USERNAME = value;
}
}

private decimal _REGFEE;
/// <summary>
/// 挂号费
/// </summary>
public decimal REGFEE
{
get { return _REGFEE; }
set
{
if (_REGFEE != value && RowState == RowStateFlags.ROW_Original)
{
RowState = RowStateFlags.ROW_Edited;
}
_REGFEE = value;
}
}

public string FBNAME { get; set; }

public decimal perOfTotal { get; set; }

}

List<HIS_CLIREGISTER> CLIREGISTERS = new List<HIS_CLIREGISTER>();

List<HIS_CLIREGISTER> items = reportDomain.GetRecordsCLIREGCost(frmcrt.StartDt.ToString("yyyy-MM-dd"), frmcrt.EndDt.ToString("yyyy-MM-dd"), ref errorMessage);//取得数据集

decimal Total = items.Sum(s => s.REGFEE);

//费别分组
var itemsGB = from a in items.GroupBy(g => g.FBCODE) select new { a.Key, FBNAME = a.Max(m => m.FBNAME) };
foreach (var v in itemsGB)
{
List<HIS_CLIREGISTER> tmpItems = items.Where(w => w.FBCODE == v.Key).ToList();
//操作人分组
List<HIS_CLIREGISTER> itemsGB2 = (from a in tmpItems.GroupBy(g => g.USERNAME)
select new HIS_CLIREGISTER
{
FBCODE = v.Key,
USERNAME = a.Key,
FBNAME = v.FBNAME,
REGFEE = a.Sum(s => s.REGFEE),
perOfTotal = a.Sum(s => s.REGFEE) / Total
}).ToList();
CLIREGISTERS.AddRange(itemsGB2);
}

原文地址:https://www.cnblogs.com/mapstar/p/10774336.html