4

私はLINQを学び始めたばかりです。3回繰り返されるリスト内の数値を取得するために、次のlinq式を作成しました。

 var query = from i in tempList
             where tempList.Count(num => num == i) == 3
             select i;

これをドット表記に変換する方法を知りたいです。

4

2 に答える 2

5

使用できますEnumerable.GroupBy

var query = tempList
            .GroupBy(i => i)
            .Where(g => g.Count() == 3)
            .Select(g => g.Key); 

例えば:

var tempList = new List<Int32>(){
    1,2,3,2,2,2,3,3,4,5,6,7,7,7,8,9
};
IEnumerable<int> result = tempList
 .GroupBy(i => i)
 .Where(g => g.Count() == 3)
 .Select(g => g.Key); 

Console.WriteLine(string.Join(",",result));

結果: 3,7

于 2012-07-14T22:40:59.377 に答える
1

リテラル変換は次のとおりです。

var query = tempList.Where(i => tempList.Count(num => num == i) == 3);

Tim が既に述べたように、GroupBy を使用してこれを実現することもできます。

var query = tempList.GroupBy(i => i).Where(g => g.Count() == 3).Select(g => g.Key);

GroupByバージョンは、各数値の 3 つのコピーを返すコードとは異なり、各数値の1 つのコピーのみを返すことに注意してください。ただし、各番号のコピーを 1 つだけ取得することをお勧めします。

于 2012-07-14T22:38:51.437 に答える