使用LINQ的List项目上的GROUPBY和SUM

时间:2016-12-27 09:35:24

标签: c# linq group-by sum

我的List类型为DailySummary

public class DailySummary
{
    public string AffiliateID { get; set; }
    public string TotalCalls { get; set; }
    public string Date{ get; set; }
}

以下示例数据:

List<DailySummary> DealerTFNDatesTable = new List<DailySummary>();
DealerTFNDatesTable.Add(new DailySummary() { AffiliateID="0", Date = "12/12/2016", TotalCalls = "10"});
DealerTFNDatesTable.Add(new DailySummary() { AffiliateID="0", Date = "12/13/2016", TotalCalls = "74"});
DealerTFNDatesTable.Add(new DailySummary() { AffiliateID="1", Date = "12/22/2016", TotalCalls = "63"});
DealerTFNDatesTable.Add(new DailySummary() { AffiliateID="0", Date = "12/12/2016", TotalCalls = "58"});

现在,我想要检索按Date分组的TotalCallsAffiliateID,然后分配到另一个列表中。

for(int i =0; i < DealerTFNDatesTable.Count; i++)
{
    List<NewList> newList = new List<NewList>();
    newList.Date = //Assign Dintinct dates WHERE AffiliateId = 0 
    newList.AffiliateID = //AffiliateID=0
    newList.TotalCalls= //TotalCalls SUM GROUPBY DATE and AffiliateID = 0 
                        //For Date '12/12/2016' it will be 68, For '12/13/2016' it will be 74 and so on
}

对不起,我是LINQ的新手。有人可以帮助我或分享资源,我可以得到一个暗示来实现这个目标吗?

3 个答案:

答案 0 :(得分:2)

这应该适用于通过AffilateID和Date进行分组然后得到总和(尽管将数字存储为类似字符串的数字很奇怪,但不管是什么漂浮在你的船上)。

'/web/**'

如果您现在查看结果,例如使用此代码,您将获得所需的值:

http://localhost:8080/myapp/web/**

答案 1 :(得分:0)

var results = DealerTFNDatesTable.GroupBy(T => new { T.AffiliateID })

Link

答案 2 :(得分:0)

首先,

由于DealerTFNDatesTable是变量,因此您应该使用驼峰大小写。因此它是dealerTFNDatesTable

然后完成@andy他的回答,因为你也想做一个选择。您可以按如下方式选择它:

        var newVariable = from item in dealerTFNDatesTable
                   group item by new
                   {
                       item.Date,
                       item.AffiliateID,
                   }
                   into g
                   select new
                   {
                       Date = g.Key.Date,
                       Id = g.Key.AffiliateID,
                       Total = g.Sum(a => a.TotalCalls)
                   };

这将为您提供IEnumerable,您可以通过执行var otherList = new List<object>(newVariable .Where(a => a.Total > 0));将相关部分放入列表中,或者只是在选择后添加.ToList(),如果您希望收集按原样

请注意,这只是LINQ的另一种表示法,结果是相同的。