0

このシナリオを検討してください。

私はこのようなデータを持っています:

 Id          Group            Value
 -----------------------------------
 1            1                100
 2            1                120
 3            1                100
 4            2                90
 5            2                105
 6            3                300
 7            4                123
 8            4                110
 9            5                100
 10           5                110

GroupByこのデータを1,2,3あるグループに4,5配置し、別のグループに配置したいと思います。どうすればこれを行うことができますLINQか?

ありがとう


編集1)

1,2,3あるグループと4,5別のグループCountに配置してそれらを集計したいのですが、最初のグループで6つ、2番目のグループで4つ取得します。

4

3 に答える 3

2

これはどう?

        int[] groupA = { 1, 2, 3 };
        int[] groupB = { 4, 5 };

        var result = data
            .GroupBy(a => groupA.Contains(a.Group) ? "A" : 
                          groupB.Contains(a.Group) ? "B" : 
                          "N/a")
            .Select(a => new
            {
                KEY = a.Key,
                VALUE = a.Count()
            });
于 2012-11-07T13:56:57.233 に答える
0

したがって、グループ化のルールは完全に不明確であり、アイテムの数だけが必要です。グループ化はまったく必要ないと思います。

int[] groups = { 1, 2, 3 }; // or { 4, 5 } for other groups
var groupsCount = items.Where(i => groups.Contains(i.Group))
                       .Count();

このクエリをメソッドに入れることができます(アイテムがフィールドであると想定します)

int GetItemsCountInGroups(params int[] groups)
{
    return items.Where(i => groups.Contains(i.Group))
                .Count();
}

使用法

int count = GetItemsCountInGroups(1, 2, 3); // 6
int anotherCount =  GetItemsCountInGroups(4, 5); // 4
于 2012-11-07T12:49:41.513 に答える
0

この場合、letsayとletsayにマップする関数が必要であり1,2,3、このデータセットの目的に適合している必要があります。14,52func<int,int> grouper = i => (i -1) / 3

linqは次のようになります。

var result = data.GroupBy( r => (r.Group-1)/3,
                           g => g.Count());

注:これをデータベース側で行う場合は、除算演算子が希望どおりにマップされない可能性があるため、注意が必要です。つまり、c#のint除算では、intが返されるため、分数の整数部分が返されますが、データベースではDoubleが返されるため、必要なグループ化が破られます。この場合、r => ((r.Group -1) - (r.Group -1) %3 )/3代わりに次のようなものが必要になります。

于 2012-11-07T13:13:50.567 に答える