0

linq を使用して GroupBy を実行しようとしているという点で少し問題があります。これは機能しますが、コードの 1 つの要素を削除した場合にのみ機能します。

nestedGroupedStocks = stkPositions.GroupBy(x => new { x.stockName,
                                     x.stockLongshort,x.stockIsin, x.stockPrice })
             .Select(y => new stockPos
             {
                 stockName = y.Key.stockName,
                 stockLongshort = y.Key.stockLongshort,
                 stockIsin = y.Key.stockIsin,
                 stockPrice = y.Key.stockPrice,
                 stockQuantity = y.Sum(x => x.stockQuantity)
             }).ToList();

上記のコードは、私の株式ポジションと結果を 47 エントリを含むリストにグループ化しますが、失敗したのは、異なる数量の重複株式を合計することです...

nestedGroupedStocks = stkPositions.GroupBy(x => new { x.stockName,
                         x.stockIsin, x.stockPrice })
             .Select(y => new stockPos
             {
                 stockName = y.Key.stockName,
                 stockIsin = y.Key.stockIsin,
                 stockPrice = y.Key.stockPrice,
                 stockQuantity = y.Sum(x => x.stockQuantity)
             }).ToList();

ただし、「x.longshort」を削除すると、目的の結果が得られます.34株が合計されますが、リスト内のすべてのlongshort要素はnullです...

それは私を夢中にさせます:-)

4

1 に答える 1

2

この部分

.GroupBy(x => new { x.stockName,x.stockLongshort,x.stockIsin, x.stockPrice })

が問題です。その新しいオブジェクトをキーとして要素をグループ化しようとしていますが、リスト内のすべての要素に対して x.stockLongshort が変更される可能性が高くGroupBy、名前とstockLongshortが両方の要素で一致しない限り失敗します(他の2についてはフィールドですが、それらは常に同じであると想定しています)。

nestedGroupedStocks = stkPositions.GroupBy(x => x.stockName)
         .Select(y => new stockPos
         {
             stockName = y.First().stockName,
             stockLongshort = y.First().stockLongshort,
             stockIsin = y.First().stockIsin,
             stockPrice = y.First().stockPrice,
             stockQuantity = y.Sum(z => z.stockQuantity)
         }).ToList();

stockLongshort プロパティは、グループ内の最初の要素の値と等しくなるように設定されていることに注意してください。より便利な場合は、0 に設定できます。

より長い説明

GroupBy は を返します。つまり、引数のラムダ式で定義した同じ をIEnumerable<IGrouping<TKey, TSource>>共有する同じグループの各要素を持つグループの「セット」(列挙可能) を返します。Key

オブジェクトのプロパティとして x.stockLongshort を配置するKeyと、それが によって行われる評価の判別式になりGroupBy、結果として、そのプロパティだけが異なる 2 つの要素が 2 つの異なるグループに配置されます。

于 2013-08-27T12:56:14.150 に答える