C# 如何在List上执行Linq的group by和sum操作
我有以下代码。对于objViewForecastTrendYear2中的每一项,我都在创建DicGridRow字典对象。我在DicGridRow字典中动态添加了一些属性以及一些静态属性。最后,我将该项添加到字典EntiveReviewModel的列表中。一旦我从外循环出来,我就有了List EntiveReviewModel 这个列表包含一些记录,我想在这个EntireViewModel上使用linq应用GROUPBY和sum,但我不知道怎么做。这里,objViewForecastTrendYear2是包含所有静态属性的列表对象 总体方案是EntieviewModel=无状态属性+objViewForecastTrendYear2中每个项目的动态属性C# 如何在List上执行Linq的group by和sum操作,c#,linq,dictionary,C#,Linq,Dictionary,我有以下代码。对于objViewForecastTrendYear2中的每一项,我都在创建DicGridRow字典对象。我在DicGridRow字典中动态添加了一些属性以及一些静态属性。最后,我将该项添加到字典EntiveReviewModel的列表中。一旦我从外循环出来,我就有了List EntiveReviewModel 这个列表包含一些记录,我想在这个EntireViewModel上使用linq应用GROUPBY和sum,但我不知道怎么做。这里,objViewForecastTrendYe
我想对所有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 ?????
}
);