Group by实例:
var lowValidationList = from v in dbS.Calc_Validation
join d in dbS.Calc_Date on v.DateKey equals d.DateKey
where employeeIds.Contains(v.EmployeeId)
&& d.Date < date
group v by new { v.EmployeeId, v.CommodityId }
into s
select new Validation_Extend
{
EmployeeId = s.Key.EmployeeId,
CommodityId = s.Key.CommodityId,
ConsumeCash = s.Sum(c => c.ConsumeCash),
ProfitCash = s.Sum(p => p.ProfitCash)
};
Left join实例:
var realValidation = from v in validationList
join d in drawbackList on new{ id1 = v.EmployeeId, id2 = v.CommodityId }
equals new{ id1 = d.EmployeeId, id2 = d.CommodityId }intos
from a in s.DefaultIfEmpty()
select newValidation_Extend
{
DateKey = date,
EmployeeId = v.EmployeeId,
CommodityId = v.CommodityId,
ConsumeNum = v.ConsumeNum - (a == null ? 0 : a.RefoundNumSum),
ConsumeCash = v.ConsumeCash - (a == null ? 0 : a.RefoundCashSum),
ProfitCash = v.ProfitCash - (a == null ? 0 :a.ProfitCashSum)
};
备注:注意空验证【a == null】
二者结合使用的实例可参考这个: