2016-02-28 132 views
0

迭代的GroupBy我有一個對象Linq |在一個List <>

public class MasterData 
{ 
    public string loanId { get; set; } 
    public string docId { get; set; } 
    public string fileName { get; set; } 
    public string doctype { get; set; } 
} 

我有一個List<MasterData>lstMstrDatawhich可能看起來像這樣

<table> 
    <tr> 
    <th>loanId</th> 
    <th>docId</th> 
    <th>docType</th> 
    </tr> 
    <tr> 
    <td>101</td> 
    <td>8001</td> 
    <td>BankStatement</td> 
    </tr> 
    <tr> 
     <td>102</td> 
     <td>8002</td> 
     <td>CreditReport</td> 
    </tr> 
    <tr> 
    <td>103</td> 
    <td>8003</td> 
    <td>PaySlip</td> 
    </tr> 
    <tr> 
     <td>103</td> 
     <td>8003</td> 
     <td>Payslip</td> 
    </tr> 
    <tr> 
    <td>104</td> 
    <td>8004</td> 
    <td>CreditReport</td> 
    </tr> 
    <tr> 
     <td>105</td> 
     <td>8006</td> 
     <td>Mortgage</td> 
    </tr> 
    <tr> 
    <td>105</td> 
    <td>8007</td> 
    <td>Mortgage</td> 
    </tr> 
    </table> 

我想從這個使用GroupBy獲取列表。我想要得到一個doctype列表,其中包含唯一DocId的數量。

所以上面的清單將主要導致:

|Doctype   |UniqueDocIdCount 
---------------------------------- 
|BankStatement |1 
|CreditReport |2 
|PaySlip   |1 
|Mortgage  |2 

我試圖做這樣的,但如果docID的是保證不會產生正確的結果

var groupDoctype = lsMstrData 
        .GroupBy(g => new {g.doctype, g.docId})      
        .Select(s => s.ToList()) 
        .ToList(); 

回答

2
var groupDoctype = lsMstrData 
       .GroupBy(g => g.doctype) 
       .Select(g => new { Doctype = g.Key, UniqueDocIdCount = g.Select(k => k.docId).Distinct().Count() }) 
       .ToList(); 

獨特,那麼你可以刪除「獨特」,只是離開g.Count()。

相關問題