位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 查询大型数据集

提问人:刘团圆发布时间:2020-12-11

    LINQ语法非常好,但其作用是什么?我们只要査看源数组,就可以看出需要的结果,为什么要査询这种一眼就能看出结果的数据源呢?如前所述,有时查询的结果不那么明显。在下例中,就创建了一个非常大的数字数组,并用LINQ查询它。


试一试 查询大型数据集:BeginningCSharp7 _22_6_LargeNumberQuery\Program.cs

按照下面的步骤在Visual Studio 2017中创建示例。

(1)在 C:\BeginningCShaip7\Chaptei22目录中创建一个新的控制台应用程序 BeginningCShaip7_22_6_ LargeNumbeiQuery。与以前一样,创建项目时,Visual Studio 2017会自动在Program.cs中包含Linq名称空间。

    using System;

using System.Collections.Generic; 

using System.Linq; 

using System.Text; 

using static System,Console;

(2)在Main()方法中添加如下代码:

static void Main (string[] args)

{

    int[] numbers = GenerateLotsOfNuntbers(12045678); 

      var queryResults = 

          from n in nunibers 

          where n < 1000 

          select n

        ;

      WriteLine("Numbers less tiian 1000:"}; 

      foreach (var item in queryResults)

      {

          WriteLine(xtero);

      }

      Write("Program finished, press Enter/Return to continue:"); 

      ReadLine();

}

(3)添加如下方法,生成一个随机数列表:

private static int[] GenerateLotsOfNumbers(int count)

{

    Random generator = new Random(0); 

    int[] result = new int[count]; 

    for (int i = 0; i < count; i++)

    {

        result[i] = generator.Next();

    }

    return result;

}

(4)编译并执行程序。结果是一个小于1000的数字列表,如下所示:

Numbers less than 1000:

714

24

677

350

257

719

584

Program finished, press Enter/Return to continue:


示例说明

与前面一样,第一步是引用System.Linq名称空间,这是在创建项目时由Visual Studio 2017自动引用的:

    using System.Linq;

接着创建一些数据,为此,本例中创建并调用了 GenerateLotsOfNurabers()方法:

      int[] numbers = GenerateLotsOfNumbers(12345678); 

    private static int[] GenerateLotsOfNumbers(int count)

    {

        Random generator = new Random(0); 

        int[] result = new int[count]; 

        for (int i = 0; i < count; i++)

        {

            result[i] = generator.Next();

        }

        return result;

    }

  这不是一个小数据集,数组中有1200万个数字!需要修改传递给 GenerateLotsOfNumbers()方法的size参数,生成数量不同的随机数,看看这会对查询结果有什么影响。

  数值应随机分布在有符号的整数范围内(从0到超过20亿)。用种子值0创建随机数生成器,可以确保每次创建相同的随机数集合,这是可以重复的,所以会获得与此处相同的查询结果,但在尝试一些查询之前,并不知道查询结果是什么。而LINQ使这些查询很容易编写。

    查询语句本身类似于前面用于names数组的查询,也是选择某些满足条件的数字(这里是数字小于1000):

        var queryResults =

            from n in numbers 

            where n < 1000 

            select n

  这次不需要wderby子句,但处理时间稍长(对于这个查询,处理时间的变化不太明显,但下一个示例会改变选择条件,处理时间的变化就比较明显了)。

  用foreach语句输出查询的结果,与前面的示例相同:

    WriteLine("Numbers less than 1000:"}; 

    foreach (var item in queryResults) {

        WriteLine(item);

    }

  同样,将结果输出到控制台上,并读取一个字符以暂停输出:

    Write("Program finished, press Enter/Return to continue:");

    ReadLine();

  后面所有的示例都有暂停代码,但不再列出,因为每个示例的暂停代码都相同使用LINQ,可以很容易地修改查询条件,以便演示数据集的不同特性。但是,根据查询返回的结果数,每次都输出所有的结果是没有意义的。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部