2015-12-14 65 views
-3

我有兩個IEnumerable<StatusGroup>其中StatusGroup如何連接兩個IEnumerable的公司,並將其投射到一個分組

public class StatusGroup 
    { 
     public DateTime ExamDate{ get; set; } 
     public int SuccessCount{ get; set; } 
     public int FailCount{ get; set; } 
    } 

我想合併兩個IEnumerable的,所以結果將爲每個日期和金額只是一個記錄計數器的屬性應該被計算

例如

List1={Date= 01/01/2016 , Success=10, Fail=0} 
List2={Date= 01/01/2016 , Success=0, Fail=3} 

結果應該是

List2={Date= 01/01/2016 , Success=10, Fail=3} 
+2

的GroupBy(X => x.Date)。選擇(X =>新StatusGroup {日期= x.Key,成功= x.Sum(Y => y.Success) ...}) –

+0

https://msdn.microsoft.com/en-us/library/bb545971.aspx –

+0

定義「最好的」 –

回答

6

你可以做Concat/Union,然後按日期分組。代碼看起來大約是這樣的:

var list3 = List1.Concat(List2) 
          .GroupBy(x => x.Date) 
          .Select(grouping => 
           new StatusGroup 
           { 
            Date = grouping.Key, 
            SuccessCount = grouping.Sum(x => x.SuccessCount), 
            FailCount = grouping.Sum(x => x.FailCount) 
           }); 
+9

請勿使用'Union'。 '聯合'刪除重複,這給你錯誤的總和。使用'Concat'。 – hvd

+0

@hvd對於結構體來說,是的,但不是類 - 除非它們已經重寫了'Equals'方法,當然(和* this *中的重複類似乎是錯誤的)。儘管你的觀點仍然有效。 – Rob

+2

@Rob取決於班級。如果它覆蓋'Equals'和'GetHashcode'或不。 – Magnus

相關問題