【问题标题】:Linq | Iterative Groupby on a List<>林克 |列表上的迭代 Groupby<>
【发布时间】:2016-02-28 14:56:53
【问题描述】:

我有一个对象

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

我有一个List&lt;MasterData&gt; 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 从中获取列表。我想获取一个文档类型列表,其中包含与之关联的唯一 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(); 

【问题讨论】:

    标签: c# linq list group-by


    【解决方案1】:
    var groupDoctype = lsMstrData
                    .GroupBy(g => g.doctype)
                    .Select(g => new { Doctype = g.Key, UniqueDocIdCount = g.Select(k => k.docId).Distinct().Count() })
                    .ToList(); 
    

    如果 docID 保证是唯一的,那么您可以删除“Distinct”并保留 g.Count()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 2015-05-31
      • 2019-07-05
      • 2015-01-24
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多