欢迎投稿

今日深度:

LINQ——语言级集成查询入门指南(1)(2)

LINQ语法介绍

对于那些特别想知道如何组织和格式化代码的人而言,需要花一点时间来熟悉LINQ的语法,如何将其运用到自己的代码中去,对于那些已经听说过LINQ不是嵌入式SQL的人,在使用LINQ时可能需要花点时间来适应。

尽管LINQ不是只能访问数据库,我发现它在帮助人们理解LINQ时的价值,首先是检验SQL语句,然后再在代码中加入LINQ表达式完成同样的事情,下面的SQL语句是基于Microsoft SQL Server的Northwind示例数据库中构建的,这个查询非常简单,列出没有住在Berlin顾客。

SELECT c.CompanyName, c.ContactName, c.City
FROM Customers c
WHERE c.City != 'Berlin'
ORDER BY c.ContactName

现在来看看用LINQ表达式做同样的事情,解剖并理解清除其中的细节,有两种查询语法:查询表达式和方法查询。目前,暂时先考虑查询表达式,下面的查询表达式将从GetCustomers()返回的结果查询IEnumerable类型,找出那些没有居住在Berlin的顾客。对于这个例子,你会认为是GetCustomers方法查询数据库并返回IEnumerable类型的。

var customerNotInBerlin =
   from c in GetCustomers()
   where c.City != "Berlin"
   orderby c.ContactName
   select c;

下面的表格概述了LINQ可用的部分选项

Destination

目标

var <变量> =

使用类型推理来赋值

Source

from <项目> in <数据源>

信息源提供一套项目

Filter

过滤器

where <表达式>, distinct

表达式指定选择的标准

Order

排序

order by <表达式>, <表达式> [升序 | 降序]

控制结果的排序

Aggregate

合计

count([<表达式>]), sum(<表达式>), min(<表达式>), max(<表达式>), avg(<表达式>)

合计源项目

Projection

投影

select <表达式>

构造输出内容

还有更多的选项和语法变化,这里只是为了向你提供一个入门的介绍。

 

通过例子测试驱动LINQ

 

至此,你已经对LINQ有一点背景知识了,下面我们通过一个新的有用的例子来对LINQ进行测试,你已经看到如何使用LINQ从结构类型、文件或时间日志中读取数据。

 

访问结构类型

 

你可以使用之前的例子显示语法和查询结构类型,你将会创建一个Custome结构类型,并从Northwind数据库获取一些数据来填充Customer结构类型,你可以选择City不是Berlin的记录,然后在终端显示它们,因为你选择的是Customer对象,所以你可以使用ToString方法来格式化输出,使用逗号分隔显示属性。

 

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

namespace LINQIntro
{
   class Customer
   {
      public string CustomerName { get; set; }
      public string ContactName { get; set; }
      public string City { get; set; }
      public override string ToString()
      {
         return this.CustomerName + ", " +
            this.ContactName + ", " + this.City;
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         Program.ShowCustomers();
      }

      public static void ShowCustomers()
      {
         //使用对象初始化程序建立一列customer
         List customers = new List {
            new Customer { CustomerName = "Alfreds Futterkiste",
               ContactName = "Maria Anders", City = "Berlin"},
            new Customer { CustomerName =
               "Ana Trujillo Emparedados y helados",
               ContactName = "Ana Trujillo",
               City = "México D.F."},
            new Customer { CustomerName =
               "Antonio Moreno Taquería",
               ContactName = "Antonio Moreno",
               City = "México D.F."},
            new Customer { CustomerName = "Around the Horn",
               ContactName = "Thomas Hardy",
               City = "London"},
            new Customer { CustomerName = "Berglunds snabbköp",
               ContactName = "Christina Berglund",
               City = "Luleå"}};

          //查询customer列,指定显示字段
            var customer =
            from c in customers
            where c.City != "Berlin"
            orderby c.ContactName
            select c;

         //在终端显示选择的记录
         foreach (var row in customer)
         {
            Console.WriteLine(row);
         }
         Console.ReadLine();
      }
   }
}


www.htsjk.Com true http://www.htsjk.com/shujukujc/19168.html NewsArticle LINQ语法介绍 对于那些特别想知道如何组织和格式化代码的人而言,需要花一点时间来熟悉LINQ的语法,如何将其运用到自己的代码中去,对于那些已经听说...
相关文章
    暂无相关文章
评论暂时关闭