C# 与Mager的评论。。在打电话之前我还没读过。。现在我来看看你的问题,但首先我要求你确认你的要求是你在对我的回答的第一个评论中指定的。我已经实施了一个新的解决方案。它克服了您的问题,实现了您的需求以及第一条评论中表达的需求。请给我一些反馈好吗? <s

C# 与Mager的评论。。在打电话之前我还没读过。。现在我来看看你的问题,但首先我要求你确认你的要求是你在对我的回答的第一个评论中指定的。我已经实施了一个新的解决方案。它克服了您的问题,实现了您的需求以及第一条评论中表达的需求。请给我一些反馈好吗? <s,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,与Mager的评论。。在打电话之前我还没读过。。现在我来看看你的问题,但首先我要求你确认你的要求是你在对我的回答的第一个评论中指定的。我已经实施了一个新的解决方案。它克服了您的问题,实现了您的需求以及第一条评论中表达的需求。请给我一些反馈好吗? <summary> <period>Jul-2016</period> <providerid>7</providerid> <type>1</type


与Mager的评论。。在打电话之前我还没读过。。现在我来看看你的问题,但首先我要求你确认你的要求是你在对我的回答的第一个评论中指定的。我已经实施了一个新的解决方案。它克服了您的问题,实现了您的需求以及第一条评论中表达的需求。请给我一些反馈好吗?
<summary>
    <period>Jul-2016</period>
    <providerid>7</providerid>
    <type>1</type>
    <volume>2981655</volume>          
</summary>
<summary>
    <period>Jul-2016</period>
    <providerid>7</providerid>
    <type>2</type>
    <volume>6449570</volume>
</summary>
<summary>
    <period>Jul-2016</period>
    <providerid>7</providerid>
    <type>3</type>
    <volume>7702484</volume>
</summary>        
public class UsageSummary
{       
        public int carrierID { get; set; }
        public Int64 minutes { get; set; }
        public Int64 sms { get; set; }
        public Int64 data { get; set; }
        public string period { get; set; }
}
List<UsageSummary> obj = new List<UsageSummary>();

obj = (from res in xmlDoc.Descendants("summary")
       select new UsageSummary
                  {
                      carrierID = (Convert.ToInt16(res.Element("providerid").Value)),                 
                      period = res.Element("period").Value.ToString(),
                      sms = (Convert.ToInt64(res.Element("SMS").Value)),
                      data = (Convert.ToInt64(res.Element("DATA").Value)),
                      minutes = (Convert.ToInt64(res.Element("MINUTES").Value))
                  }).ToList();    
var items =
    from summary in doc.Descendants("summary")
    select new
    {
       Period = (string) summary.Element("period"),
       CarrierId = (int) summary.Element("providerid"),
       Type = (int) summary.Element("type"),
       Volume = (long) summary.Element("volume")
    };
var volumesByPeriodAndCarrier =
    from item in items
    group item by new {item.CarrierId, item.Period}
    into grouping
    select new
    {
        grouping.Key.CarrierId,
        grouping.Key.Period,
        VolumeByType = grouping.ToLookup(x => x.Type, x => x.Volume)
    };
var summaries = volumesByPeriodAndCarrier
    .Select(x => new UsageSummary
    {
        carrierID = x.CarrierId,
        minutes = x.VolumeByType[2].Sum(),
        sms = x.VolumeByType[1].Sum(),
        data = x.VolumeByType[3].Sum(),
        period = x.Period
    }).ToList();
List<UsageSummary> obj = new List<UsageSummary>();

obj = (from xmlsummary in doc.Descendants("summary")
       group xmlsummary by new { id = xmlsummary.Element("providerid").Value, period = xmlsummary.Element("period").Value } into summaryGrouped
       select new UsageSummary{
                carrierID = Convert.ToInt16(summaryGrouped.Key.id),
                period = summaryGrouped.Key.period,
                sms = (summaryGrouped.Where(sg => sg.Element("type").Value.Equals("1")).Select(v => Convert.ToInt64(v.Element("volume").Value)).Sum()),
                minutes = (summaryGrouped.Where(sg => sg.Element("type").Value.Equals("2")).Select(v => Convert.ToInt64(v.Element("volume").Value)).Sum()),
                data = (summaryGrouped.Where(sg => sg.Element("type").Value.Equals("3")).Select(v => Convert.ToInt64(v.Element("volume").Value)).Sum())
               }
      ).ToList();