您好,我是LINQ的新手,您能看到我的代码出了什么问题吗?

时间:2014-03-08 14:42:32

标签: c# asp.net-mvc linq

你可以看到我试图实现一个从数组中写出最低数字的函数" arrNumbers"

class Program
{
    public static IEnumerable<int> GetNumbers()
    {
        int[] arrNumbers = { 10, 7, 4, 8, 3, 2, 11, 27, 55, 12, 10, 23 };
        return arrNumbers;
    }

    // Find the lowest number returned from the function GetNumbers( )

    static void Main(string[] args)
    {
        int result1 = (from i in GetNumbers()
                       orderby i descending
                       select i).Take(1);
                    Console.WriteLine(result1);
 }

4 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。我会一个接一个地打他们。

最大的问题是这不会编译。 Take会返回多个项目...而您正试图将其推入单个int变量中。相反,您可以拨打First()

int result1 = (from i in GetNumbers()
                   orderby i descending
                   select i).First()

第二大问题是......这是最高的......而不是最低的。您想要删除decending

int result1 = (from i in GetNumbers()
                   orderby i
                   select i).First()

然后..通过LINQ总是有Min()方法,这样就不需要了所有这些:

int result1 = GetNumbers().Min();

答案 1 :(得分:0)

问题是result1仍然是IEnumerable<int>类型,而不是int。此外,您正在进行降序排序,这将是最高的数字。这是因为Take(1)返回带有前1个元素的序列,而不是第一个元素。只需.First()或更好GetNumbers().Min();

var result1 = GetNumbers().Min();
// OR
var result1 = (from i in GetNumbers()
               orderby i
               select i)
               .First();

答案 2 :(得分:0)

descending更改为ascending

int result1 = (from i in GetNumbers()
                   orderby i ascending
                   select i).First();

或使用Min

Console.WriteLine(GetNumbers.Min());

答案 3 :(得分:0)

如果您将其更改为Take(5),则会在集合中获得(可能)5个元素。

同样,即使您指定了Take(1),您仍然要求使用一个元素进行集合。

如果您只想“获取”一条记录,可以使用First()

int result1 = (from i in GetNumbers()
               orderby i descending
               select i).First();

这实际上是否为您提供了您期望的结果是有争议的,因为它当前返回的是最大的数字,而不是最小的数字。由于您的集合只是一个原始类型(int),您可以尝试MinMax,正如其他人所建议的那样。