我刚开始学习LINQ。我编写了以下linq表达式来获取列表中重复3次的数字。
var query = from i in tempList
where tempList.Count(num => num == i) == 3
select i;
我想知道如何将其转换为点符号。
答案 0 :(得分: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
答案 1 :(得分:1)
文字转换如下:
var query = tempList.Where(i => tempList.Count(num => num == i) == 3);
正如蒂姆已经提到的,你也可以使用GroupBy来实现这个目标:
var query = tempList.GroupBy(i => i).Where(g => g.Count() == 3).Select(g => g.Key);
请注意,GroupBy
版本仅返回每个数字的一个副本,这与返回每个数字的三个副本的代码不同。虽然我怀疑你宁愿只得到每个数字的一个副本。