我需要一个查询来找出在c#中使用LINQ的数组中排名前10位的奇数。
我尝试了下面的代码。它工作,但我需要一个单一的LINQ查询找到前10条记录。int[] Arr1 = { 2, 3, 4, 5, 6, 10, 1, 12, 11, 34, 221, 33, 13, 55,
123, 44, 222, 232, 45, 656, 67, 56, 445, 456 };
var result = from y in Arr1 where y%2 == 1 select y;
int c = 1;
foreach (var item in result)
{
if (c <= 10)
{
Console.WriteLine(item);
c++;
}
}
从技术上讲,您已经在var result = from y in Arr1 where y%2 == 1 select y;
中有一个LINQ查询…可以写成
var result = (from y in Arr1 where y % 2 == 1 select y).Take(10);
但是我个人发现LINQ的风格很难阅读和维护(而且不够灵活,因为在这种情况下,我们最终不得不使用"方法")。风格)。
所以我会用Where
来编码你的条件。
var result = Arr1.Where(n => n % 2 == 1);
然后只取符合条件的前10个元素
var result = Arr1.Where(...).Take(10);
那么你的foreach
循环不需要计数器变量作为结果是一个可枚举的10或更少的元素在它。
你可以得到所有的奇数,然后按顺序排列列表,这意味着最大的将在列表的顶部,然后从列表中取出前十个元素,代码如下:
int[] Arr1 = { 2, 3, 4, 5, 6, 10, 1, 12, 11, 34, 221, 33, 13, 55,
123, 44, 222, 232, 45, 656, 67, 56, 445, 456 };
// Get the odd numbers
var largestOddNumbers = Arr1.Where(n => n % 2 != 0)
// Sort from the largest to the smallest
.OrderByDescending(n => n)
.Take(10); // Take only the first ten elements