4

我刚开始学习LINQ。我编写了以下 linq 表达式来获取列表中重复 3 次的数字。

 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版本仅返回每个数字的一​​个副本,这与您的代码返回每个数字的三个副本不同。尽管我怀疑您宁愿只获得每个号码的一份副本。

于 2012-07-14T22:38:51.437 回答