我剛開始學習LINQ。我寫了下面的linq表達式來獲取重複3次的列表中的數字。將Linq查詢表達式轉換爲點表示法
var query = from i in tempList
where tempList.Count(num => num == i) == 3
select i;
我想知道如何將其轉換爲點符號。
我剛開始學習LINQ。我寫了下面的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
我使用的HashSet得到查詢一個文字換算如下:
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
版本只返回一個每個數字的副本,不像你的代碼,返回每個數字的三個副本。雖然我懷疑你只想得到每個號碼的一個副本。
感謝您的答案和它運作良好的例子! – kr13 2012-07-14 22:48:39