or
var data = from week in base.Db.WeeklyInputs where week.FranchiseId == franchiseId && week.Year == year select new { week.FranchiseId, week.WeekEnding, week.CleaningWages, week.BonusWages, week.TotalMaidsAbsent, week.TotalMaidsScheduled, week.MaidTurnover, week.TotalMaidMinutes, week.AverageTeamSize, week.TravelTime, week.QualityCardsReturned, week.QualityCardPoints, Cancels = week.CustomerCancellations, Name = week.Franchise.Title, TotalRev = week.WeeklySalesByLocation.Sum(sales => sales.Sales), TotalUnitsCleaned = week.WeeklySalesByLocation.Sum(s => s.UnitsCleaned), AverageQualityPoints = week.QualityCardsReturned == 0 ? 0 : week.QualityCardPoints/week.QualityCardsReturned, AverageHourlyWage = week.TotalMaidMinutes == 0 ? 0 : (week.CleaningWages)*60/(week.TotalMaidMinutes), RegularRev = week.WeeklySalesByLocation .Where(s => s.LocationType == "Regular").Sum(sales => sales.Sales), FirstRev = week.WeeklySalesByLocation .Where(s => s.LocationType == "FirstEntry").Sum(sales => sales.Sales), OnCallRev = week.WeeklySalesByLocation .Where(s => s.LocationType == "OnCall").Sum(sales => sales.Sales), CommercialRev = week.WeeklySalesByLocation .Where(s => s.LocationType == "Commercial").Sum(sales => sales.Sales), Conversions = week.MarketingExpenses .Sum(marketing => marketing.Conversions), Locations = week.WeeklySalesByLocation .Select(l => new { l.Sales, l.LocationType, l.UnitsCleaned, l.TeamMinutes, l.MaidMinutes, AverageSale = l.UnitsCleaned == 0 ? 0 : l.Sales/l.UnitsCleaned, AverageTime = l.UnitsCleaned == 0 ? 0 : l.MaidMinutes/l.UnitsCleaned, AverageRevPerMaidHour = l.MaidMinutes == 0 ? 0 : (l.Sales/l.MaidMinutes)*60 }), AverageRevenuePerInHomeMaidHour = (week.TotalMaidMinutes + (week.TravelTime*week.AverageTeamSize)) == 0 ? 0 : week.WeeklySalesByLocation.Sum(sales => sales.Sales)/ (week.TotalMaidMinutes + (week.TravelTime*week.AverageTeamSize))*60 };