私はLINQを学び始めたばかりです。3回繰り返されるリスト内の数値を取得するために、次のlinq式を作成しました。
var query = from i in tempList
where tempList.Count(num => num == i) == 3
select i;
これをドット表記に変換する方法を知りたいです。
使用できます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
リテラル変換は次のとおりです。
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 つだけ取得することをお勧めします。