2016-12-27 13 views
0

を使用してリスト項目のSUM私はサンプルデータを以下にタイプDailySummaryGROUPBYとLINQ

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

Listを持っている:

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"}); 

今、私はDateAffiliateIDによってグループ化されたTotalCallsを取得し、割り当てたいです別のリストで

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を初めて使いました。誰かが私を助けたり、これを達成するためのヒントを得ることができるリソースを共有することはできますか?

答えて

2

これはAffilateIDと日付でグループ化のために働くと(それがこのような何かのための文字列として番号を保存するために奇妙ですが、あなたのボートをどんなフロートが)その後、合計値を取得する必要があります。

var results = DealerTFNDatesTable 
    .GroupBy(x => new { x.AffiliateID, x.Date }) 
    .Select(x => new DailySummary { 
     AffiliateID = x.First().AffiliateID, 
     Date = x.First().Date, 
     TotalCalls = x.Sum(y => Convert.ToInt32(y.TotalCalls)).ToString() 
    }); 

あなたは今、結果を見れば、このコードで、たとえば、あなたが望んでいた正確な値を得る:

foreach (var x in results) { 
    Console.WriteLine($"id = {x.AffiliateID}, date = {x.Date}, totalCalls = {x.TotalCalls}"); 
} 

> id = 0, date = 12/12/2016, totalCalls = 68 
> id = 0, date = 12/13/2016, totalCalls = 74 
> id = 1, date = 12/22/2016, totalCalls = 63 
+0

完璧でシンプルなソリューション。どうもありがとう :) –

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

Link

+1

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! – kayess

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) 
        }; 

これはvar otherList = new List<object>(newVariable .Where(a => a.Total > 0));を行うことによって、あなたがリストに関連する部分を置くことができたのIEnumerableを与えるか、またはあなたがコレクションをしたい場合は、単に選択した後.ToListを()を追加しますそのまま。

これは単にLINQ以外の表記であることに注意してください。結果は同じです。