6

この質問は、 Convert List<T> to Dictionary with strategyのわずかに修正されたバージョンです。

List < DTO > があります。DTO クラスは次のようになります。

private class DTO
    {
        public string Name { get; set; }
        public int Count { get; set; }
    }

オブジェクトを作成してリストに追加します。

var dto1 = new DTO { Name = "test", Count = 2 };
var dto2 = new DTO { Name = "test", Count = 3 };
var dtoCollection = new List<DTO> {dto1, dto2};

ここで、私の要件は、リスト全体で Name フィールドが一意である必要がある dtoCollection からリストを作成する必要があることです。

たとえば、上記の dtoCollection を必要な List from に変換すると、結果のリストは次のようになります。

リスト < DTO > カウントは 1 でなければなりません。

リスト内のオブジェクトは、 Nameが「test」、Countが 5の単一の DTO である必要があります。

Count は、Name フィールドが同じであるすべての DTO の Count フィールドを合計して得られます。

4

2 に答える 2

7

試す:

var result = dtoCollection.GroupBy(dto => dto.Name)
                          .Select(group => new DTO 
                                           {
                                               Name = group.Key,
                                               Count = group.Sum(dto => dto.Count) 
                                           })
                          .ToList();

これは、DTO を名前でグループ化し、各グループから、グループのキーとそのメンバーのカウントの合計に設定されたカウントから名前を付けられた新しい DTO を抽出することによって機能します。

于 2012-11-14T13:00:16.030 に答える
3
var newList = dtoCollection.GroupBy(d => d.Name)
             .Select(g => new DTO(){ Name=g.Key, Count=g.Select(d => d.Count).Sum()})
             .ToList();
于 2012-11-14T13:00:59.923 に答える