C# 如何在List上执行Linq的group by和sum操作

C# 如何在List上执行Linq的group by和sum操作,c#,linq,dictionary,C#,Linq,Dictionary,我有以下代码。对于objViewForecastTrendYear2中的每一项,我都在创建DicGridRow字典对象。我在DicGridRow字典中动态添加了一些属性以及一些静态属性。最后,我将该项添加到字典EntiveReviewModel的列表中。一旦我从外循环出来,我就有了List EntiveReviewModel 这个列表包含一些记录,我想在这个EntireViewModel上使用linq应用GROUPBY和sum,但我不知道怎么做。这里,objViewForecastTrendYe

我有以下代码。对于objViewForecastTrendYear2中的每一项,我都在创建DicGridRow字典对象。我在DicGridRow字典中动态添加了一些属性以及一些静态属性。最后,我将该项添加到字典EntiveReviewModel的列表中。一旦我从外循环出来,我就有了List EntiveReviewModel

这个列表包含一些记录,我想在这个EntireViewModel上使用linq应用GROUPBY和sum,但我不知道怎么做。这里,objViewForecastTrendYear2是包含所有静态属性的列表对象

总体方案是EntieviewModel=无状态属性+objViewForecastTrendYear2中每个项目的动态属性


我想对所有ID字段(如UOM_ID)应用group by,并在EntiveReviewModel上的Linq求和操作中对剩余字段应用group by。 我的整个ReviewModel看起来像->

List<Dictionary<string, object>> EntireViewModel = new List<Dictionary<string, object>>();
foreach (var A in objViewForecastTrendYear2)
{
    DynamicColName = new string[NoOfHistoryColumn];
    int HistoryCol = RightHistoryColumn;
    Dictionary<string, object> DicGridRow = new Dictionary<string, object>();
    DicGridRow.Add("COMPANY_ID", A.COMPANY_ID);
    DicGridRow.Add("CUSTOMER_ID", A.CUSTOMER_ID);
    DicGridRow.Add("FINAL_FORECAST", A.FINAL_FORECAST);
    DicGridRow.Add("FINANCIAL_YEAR", A.FINANCIAL_YEAR);
    DicGridRow.Add("FORECAST_MONTH", A.FORECAST_MONTH);
    DicGridRow.Add("FORECAST_PARAMETERS_ID", A.FORECAST_PARAMETERS_ID);
    DicGridRow.Add("MARKET_PLANNER", A.MARKET_PLANNER);
    DicGridRow.Add("PROD_GRADE_ID", A.PROD_GRADE_ID);
    DicGridRow.Add("PROD_ID", A.PROD_ID);
   // DicGridRow.Add("SALES_LAST_YEAR", A.SALES_LAST_YEAR);
    DicGridRow.Add("STATISTICAL_FORECAST", A.STATISTICAL_FORECAST);
    DicGridRow.Add("STOCK_POINT_ID", A.STOCK_POINT_ID);
    DicGridRow.Add("TREND_ID", A.TREND_ID);
    DicGridRow.Add("UOM_ID", A.UOM_ID);
    DicGridRow.Add("VERSION_NO", A.VERSION_NO);
    DicGridRow.Add("CUSTOMER_FORECAST",A.CUSTOMER_FORECAST);

   // Dynamic columns goes as follows
    for (int i = 0; i < NoOfHistoryColumn; i++)
    {
        string strColumnName = Convert.ToString(HistoryCol--);
        DynamicColName[i] = strColumnName;
        //Dictionary<string, object> DicGridRow = new Dictionary<string, object>();
        DicGridRow.Add(strColumnName, A.SALES_LAST_YEAR);
    }

    EntireViewModel.Add(DicGridRow);
}
正如你所看到的,我的列表是字典对象
现在,列表的分组必须基于字典的两个或多个键,就像我们在SQL数据库(例如PL-SQL)中所做的那样。

在这里,我可以从列表EntReviewModel获取所需的数据。但只有静态数据…任何人都可以告诉如何在EntiveReviewModel中提供的linq求和操作中添加动态列


你已经描述了你想要什么,但没有描述你有什么问题。实际的问题是什么?你想按什么分组?呃,求和什么?你的问题是什么?你只说你想做的事情,我会说,什么阻止了你?我想对所有ID字段应用group by,比如UOM_ID和sum中的剩余字段。我想把linq应用到EntiveReviewModel列表中。但我不知道怎么做。。。
var DynamicQuery = EntireViewModel
      .GroupBy(d =>
           new{
            FINANCIAL_YEAR= d["FINANCIAL_YEAR"],
             CUSTOMER_ID=d["CUSTOMER_ID"],
             PROD_GRADE_ID = d["PROD_GRADE_ID"],
             PROD_ID = d["PROD_ID"],
              UOM_ID = d["UOM_ID"]
              })
             .Select(x => new
               {
           FINANCIAL_YEAR = x.Key.FINANCIAL_YEAR,
          CUSTOMER_ID = x.Key.CUSTOMER_ID,
          PROD_GRADE_ID = x.Key.PROD_GRADE_ID,
           PROD_ID = x.Key.PROD_ID,
          UOM_ID = x.Key.UOM_ID,
       STATISTICAL_FORECAST = x.Sum(r => Convert.ToDecimal(r["STATISTICAL_FORECAST"])),
            CUSTOMER_FORECAST = x.Sum(r => Convert.ToDecimal(r["CUSTOMER_FORECAST"])),
            MARKET_PLANNER = x.Sum(r => Convert.ToDecimal(r["MARKET_PLANNER"])),
            FINAL_FORECAST = x.Sum(r => Convert.ToDecimal(r["FINAL_FORECAST"]))
           // For Dynamic Column ?????
             }
         );