Linq |列表上的迭代Groupby<>

时间:2016-02-28 14:56:53

标签: c# linq list group-by

我有一个对象

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

我尝试这样做,但没有产生正确的结果

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

1 个答案:

答案 0 :(得分:2)

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

如果docID保证是唯一的,那么您可以删除&#34; Distinct&#34;然后离开g.Count()。