第一个Linq例子和理解结构化查询

linq官方学习文章

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/index

LINQ应用的地方非常广。不仅仅可以用在查找数据库。还可以用数组 List sql entity xml等等。下面我们来演示我们的第一个例子。第一个例子我们从一个字符串数组中查找出以某个字符结尾的字符串。

我们打开VS2015,创建一个控制台项目。

class Program
{
    static void Main(string[] args)
    {
        //准备一个数组
        string[] siteNames = { "www.bamn.cn", "www.bamn.com", "www.bamn.net", "www.baidu.cn" };
        //使用linq从数组中获取出所有以.cn结尾的域名
        var realSite =
            from s in siteNames
            where s.EndsWith(".cn")
            select s;
        //显示第一个匹配到的
        Console.WriteLine(realSite.FirstOrDefault());
        //Console.WriteLine(realSite.First());//一条记录都没就报错
        Console.WriteLine(realSite.LastOrDefault());
        //Console.WriteLine(realSite.Last());
        //输出www.bamn.cn
        foreach (var item in realSite)
        {
            Console.WriteLine(item);
        }
        Console.ReadKey();
    }
}Code language: JavaScript (javascript)

LINQ的意思是Language Intergrated Query,翻译过来就是”语言集成查询”。

作为开发者的我们,以后需要转变一下您的思维方式了。因为我们上面的例子和我们以前的编程思维有点不一样。我们上面就好像对这些数组的元素进行SQL查询,sql就是结构化查询语言。好像执行sql命令一样对待这些数组元素。

比如 from s in siteNames 就好像从siteNames数组中获取一行行的数据放到s中。然后下面使用where语句,对每一个s进行过滤。只有 where s.EndsWith(".cn") 以.cn结尾的才会保留。然后最后使用select去选择那些结果返回。


查询XML

除了对数组进行查询,LINQ还可以对XML文档进行查询。因为XML文档非常适合使用LINQ来进行查询。

下面我们创建一个XML文档,这个文档是显示书本集合。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace ConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //准备一个XML对象
            XElement books = XElement.Parse(@"
                <books>
                    <book>
                        <title>程序员的修养</title>
                        <price>12.34</price>
                    </book>
                    <book>
                        <title>如何成为一名优秀的码农</title>
                        <price>1.2</price>
                    </book>
                    <book>
                        <title>第一位程序员</title>
                        <price>3.5</price>
                    </book>
                </books>
            ");

            //获取所有价格少于10元的书本的标题
            var titles =
                from book in books.Elements("book")
                where (double)book.Element("price") < 10.0
                select book.Element("title");

            foreach (var item in titles)
            {
                Console.WriteLine(item.Value);
            }
            Console.ReadKey();
        }
    }
}Code language: HTML, XML (xml)

注意以上需要先把System.Xml.Linq.DLL引入到项目中来。


LINQ是关于数据查询的技术。linq完全只与数据查询相关,不管查询的结果是返回一组还是单个对象,还是单个对象或者对象集合的字段组成的子集。在linq中,这个返回的对象集合称为”序列” sequence。大多数linq序列都是IEnumerable<T>类型的数据,T是泛型类型。如果是整数序列则是IEnumerable<int>。

LINQ可以操作的对象非常多,甚至越来越多。比如不久的将来可以对文件系统、EXCEL等文件都可以使用linq来进行查询。比如:

  • LINQ TO 对象
  • LINQ TO XML
  • LINQ TO DataSet
  • LINQ TO SQL
  • LINQ TO Entity

LINQ从c#3.0后就被整合到.NET3.5版本里面,所以读者基本不用关心怎么安装LINQ的问题。linq有时候不仅仅用在查询,还可以用在类型转换等等。比如把一个数字类型的字符串数组转换为数字然后对其排序输出。不过这个我们留着下节课来讲解。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注