2

値がtrueの場合、リスト内のすべてのアイテムをカウントし、falseの値をカウントしたい。

私はこれを持っています:

Items.GroupBy(
    i => i.ItemID,
    i => new { isScheduled = i.isScheduled },
    (key, g) => new ItemStatistics()
    {
        ItemID = key,
        ScheduledItems = g.Count(g=>g.isScheduled),
        UnscheduledItems = g.Count(g=> !g.isScheduled)
    }).ToList();

これにより、次のコンパイルエラーが発生します。

デリゲート型ではないため、ラムダ式を 'System.Collections.Generic.IEqualityComparer' 型に変換できません

あたかも別のメソッドのオーバーロードを期待しているかのように

私がこれを行うと、すべてがうまくいくようです...

Items.GroupBy(
    i => i.ItemID,
    i => new { isScheduled = i.isScheduled },
    (key, g) => new ItemStatistics()
    {
        ItemID = key,
        ScheduledItems = g.Count(),
        UnscheduledItems = g.Count()
    }).ToList();

count メソッドから式を削除すると、g=> !g.isScheduledそれが受け入れられるのはなぜですか?

4

1 に答える 1

3

見つけた...アー!

元のグループ「g」を参照するため、グループ内の内部ラムダ式の変数として「g」を使用できる場合。だから私はに変更g=>g.isScheduledしましたi=>i.isScheduled

Items.GroupBy(
    i => i.ItemID,
    i => new { isScheduled = i.isScheduled },
    (key, g) => new ItemStatistics()
    {
        ItemID = key,
        ScheduledItems = g.Count(i=>i.isScheduled),
        UnscheduledItems = g.Count(i=> !i.isScheduled)
    }).ToList();

そして今、すべてが大丈夫です

于 2013-09-01T06:39:24.360 に答える