如何聚合和求和 EntityFramework 具有多个连接的字段

How to aggregate and SUM EntityFramework fields with multiple joins

我能够生成一组理想的结果,但我需要对这些字段进行分组和求和,并且正在努力了解如何处理这个问题。

在我的场景中,什么是获得结果的最佳方式:

  1. 有一个不同的 [KeyCode](现在我有很多记录,相同的 KeyCode 但不同的职业细节)
  2. SUM 工资和预测字段(在同一查询中)

这是我的 LINQ 代码:

private IQueryable<MyAbstractCustomOccupationInfoClass> GetMyAbstractCustomOccupationInfoClass(string[] regionNumbers)
{
    //Get a list of wage data
    var wages = _db.ProjectionAndWages
        .Join(
            _db.HWOLInformation,
            wages => wages.KeyCode,
            hwol => hwol.KeyCode,
            (wages, hwol) => new { wages, hwol }
        )
        .Where(o => regionNumbers.Contains(o.hwol.LocationID))
        .Where(o => o.wages.areaID.Equals("48"))
        .Where(o => regionNumbers.Contains(o.wages.RegionNumber.Substring(4))); //regions filter, remove first 4 characters (0000)

    //Join OccupationInfo table to wage data, for "full" output results
    var occupations = wages.Join(
                _db.OccupationInfo,
                o => o.wages.KeyCode,
                p => p.KeyCode,
                (p, o) => new MyAbstractCustomOccupationInfoClass
                {
                    KeyCode = o.KeyCode,
                    KeyTitle = o.KeyTitle,
                    CareerField = o.CareerField,
                    AverageAnnualOpeningsGrowth = p.wages.AverageAnnualOpeningsGrowth,
                    AverageAnnualOpeningsReplacement = p.wages.AverageAnnualOpeningsReplacement,
                    AverageAnnualOpeningsTotal = p.wages.AverageAnnualOpeningsTotal,
                });

    //TO-DO: How to Aggregate and Sum "occupations" list here & make the [KeyCode] Distinct ?

    return occupations;
}

我不确定是否应该在第二次加入时执行分组机制?或者执行 .GroupJoin()?或者有第三个查询?

var occupations = _db.OccupationInfo.GroupJoin(
            wages,
            o => o.KeyCode,
            p => p.wages.KeyCode,
            (o, pg) => new MyAbstractCustomOccupationInfoClass {
                KeyCode = o.KeyCode,
                KeyTitle = o.KeyTitle,
                CareerField = o.CareerField,
                AverageAnnualOpeningsGrowth = pg.Sum(p => p.wages.AverageAnnualOpeningsGrowth),
                AverageAnnualOpeningsReplacement = pg.Sum(p => p.wages.AverageAnnualOpeningsReplacement),
                AverageAnnualOpeningsTotal = pg.Sum(p => p.wages.AverageAnnualOpeningsTotal),
            });