0

次のようなデータセットがあります。

Name Type Quantity
 A    1    2
 A    2    3
 B    1    3

3 つのフィールド (string Name、int Type、double Quantity) を持つクラス Items によって定義されます。

これは、Summary という List< Items > に格納されます。

私がする必要があるのは、特定の名前の QUANTITY の合計を取得することですが、このロジックははるかに大きな LINQ クエリ内にあるため、LET ステートメントを使用してそれを行う方法を見つけようとしています。

(Name = TargetName) の合計数量を探していることを知っているので、次のようなことをしようとしていました。

let items = Summary.Where(y => y.Name == TargetName).GroupBy.(z => z.Name)

これで、次のようにアイテムを使用して合計を取得できます。

TotalQuantity = items.Sum(x => x.Quantity)

しかし、これは機能しません。次のエラーが発生します。

エラー 2 'System.Linq.IGrouping' には 'Quantity' の定義が含まれておらず、拡張メソッド 'Quantity' もありません

これは、x を実行する場合にも当てはまります。intelisense には Quantity のオプションはありません (これがリストであるかのようにオプションを与えてくれます)。

何か案は?これは初心者の間違いだと思います(LINQは初めてです)。ありがとう、

4

1 に答える 1

2

特定の名前の合計のみが必要な場合は、次のように呼び出します。

TotalQuantity =  Summary.Where(y => y.Name == TargetName)
                        .Sum(x => x.Quantity);

GroupByこの場合は使用する必要はありません。しかし、異なる名前で非常に頻繁にアクセスしたい場合は、パフォーマンスを改善するために次のSUMように使用することを考えるかもしれません:GroupByToDictionary

var sumDic = Summary.GroupBy(z => z.Name)
                    .ToDictionary(g => g.Key, 
                                  g => g.Sum(x => x.Quantity));

したがって、 any の数量を取得する場合は、次Nameを使用しますsumDic

var result = sumDic[TargetName];
于 2013-06-06T03:22:28.507 に答える