1.LinqToSql 多个字段groupBy 并添加总计列:
using (TravelBillEntities travelBill = new TravelBillEntities()) {
var accountBill = travelBill.AccountBill.AsQueryable<AccountBill>();
var payChannel = travelBill.PayChannel.AsQueryable<PayChannel>();
EnumPayMethod etmp = (EnumPayMethod)int.Parse( PayMethodChooser1.PayMethod );
if (etmp != EnumPayMethod.Unknown) {
int paymethodId = (int)etmp;
payChannel = payChannel.Where( t => t.PayMethod.PayMethodId == paymethodId );
}
var query = from bill in accountBill
join channel in payChannel
on bill.PayChannelId equals channel.PayChannelId
group bill by new {
channel.PayChannelName,
channel.PayMethod.PayMethodName,
bill.Business.BusinessName,
bill.SettleStatus
}
into bc
select new {
支付通道 = bc.Key.PayMethodName,
借方 = bc.Sum( t => t.CreditAmount ),
贷方 = bc.Sum( t => t.DebitAmount ),
支付方法 = bc.Key.PayMethodName,
交易类型 = bc.Key.BusinessName,
结算状态 = bc.Key.SettleStatus,
通道手续费 = bc.Sum( t => t.ChannelPayCost ),
会员手续费 = bc.Sum( t => t.CustomerPayCost )
};
var dataList = query.ToList();
dataList.Add( new {
支付通道 = "总计",
借方 = (dataList.Sum( t => t.借方 )),
贷方 = (dataList.Sum( t => t.贷方 )),
支付方法 = string.Empty,
交易类型 = string.Empty,
结算状态 = default( int ),
通道手续费 = (dataList.Sum( t => t.通道手续费 )),
会员手续费 = (dataList.Sum( t => t.会员手续费 )),
} );
e.Result = dataList;
}
2.
LinqToSql使用小结