繁体   English   中英

Linq | 列表上的迭代Groupby <>

[英]Linq | Iterative Groupby on a 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

我试图这样做,但没有得到正确的结果

var groupDoctype = lsMstrData
                    .GroupBy(g => new {g.doctype, g.docId})                    
                    .Select(s => s.ToList())
                    .ToList(); 
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()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM