C# 查询大型数据集语法 ——LINQ

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

(1) 与以前一样,创建项目时,Visual Studio  会自动在Program.cs 中包含 Linq 名称空间。

using System;
using System.Collections.Generic; 
using System.Linq;
using System.Text

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

static void Main(string[] args)
{
        int[] numbers = GenerateLotsOfNumbers(12345678);
         var queryResults =
             from n in numbers 
             where n < 1000 
             select n
           ;


         Console.WriteLine("Numbers less than 1000:"); 
           foreach (var item in queryResults)
           {
              Console.WriteLine(item);
           }
           Console.Write("Program finished, press Enter/Return to continue:"); 
           Console.ReadLine();
}

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

private static int[] GenerateLotsOfNumbers(int count)
{
   Random generator = newRandom(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  自动引用的:

using System.Ling;

接着创建一些数据,本例中是创建并调用 GenerateLotsOfNumbers() 方法:

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 参数,生成数量不同的随机数,看看这会对查询结果有什么景响。这里的 size 参数12 345 678非常大,足以生成一些小于1 000的随机数,从而获得为第一个查询显示的结果。

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

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

var queryResults =
    from n in numbers 
    where n < 1000 
    select n

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

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

Console.WriteLine("Numbers less than 1000:");
foreach (var item in queryResults) {
      Console.WriteLine(item);
}

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

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

使用 LINQ,可以很容易地修改查询条件,以便演示数据集的不同特性。但是,根据查询返回的结果数,每次都输出所有的结果是没有意义的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值