对LINQ的一些资料收集

来源:互联网 发布:android 申请网络权限 编辑:程序博客网 时间:2024/05/16 09:31

 具体想看LINQ的例子可以在安装了2008后在安装路径中有M$提供的好多例子。这里主要是记录它的一些介绍。具体研究还是看微软提供的例子比较好点吧。

 

综合查询语言LINQ 是Visual Studio 2008 和 the .NET Framework version 3.5在数据开发方面一个重大的创新.他支持C#和VisualBasie两种编程语言.

LINQ有以下四方面的优势:

1.              它简化了查询实现的方式。如果你正准备去学习C#或Visual Basic,那首先要从学习写LINQ查询开始。

2.              它有统一的语法,可以查询任何一种数据源。无论是XML 文件档、SQL数据库、DataSet数据集,内存在的集合,本地的或者是远程的数据源,都可用它去实现查询。

3.              它加强了关系形数据和实例对象的联系。它可以做为一强名称工具和设计工具去创建对象和数据间的关联。

4.              它能在程序编译捕捉到异常,缩短项目的开发时间。

LINQ标准操作简单介绍

LINQ标准操作是LINQ综合查询语言模型中的一系列方法。大部分方法都是操作实了IEnumerable(Of T) 接口或 th interface IQueryable(Of T).接口对象的序列。这些操作可以实现查询的聚合、排序、过滤、投影等功能。

LINQ标准操作之间的不同在于它们的执行时间和返加的数据是单个值还是一组序列。返回值为单值的方法(聚合函数Sum,Average)它们将会在调用时立即执行;返回值为一组系列的方法,它们将会依懒于查询语句的执行。

下面看看看简单的例子:对字符串数组进行分组,查询,排序!

        class Program

    {

        static void Main(string[] args)

        {

            string sentence = "This i a simle LINQ DEMO!";

            string[] words = sentence.Split(' ');

            var query = words.

                GroupBy(w => w.Length, w => w.ToUpper()).

                Select(g => new { Length = g.Key, Words = g }).

                OrderBy(o => o.Length);

            foreach (var obj in query)

            {

                Console.WriteLine("单词的长度 {0}:", obj.Length);

                foreach (string word in obj.Words)

                    Console.WriteLine(word);

            }

            Console.Read();

        }

}

LINQ查询操作必备三部曲

  查询就是一种从数据源获取数据的表达式。这种表达式在不同语言中有不同的定义。不同的语言面向不同的数据源,比如说SQL 是面向关系型数据库,XQuery面向XML。因此,开发员人需要为从新数据源或数据格式中获取数据而要学习不同的查询表达式语法。LINQ定义了统一的语法可从不同数据源或数据格式中获取数据,从而减少了开发员人学习的负担,减少了工作量。在LINQ查询中,不管什么数据源,都可以看做为一个对象。你可以使用同样的代码在XML文件,SQL数据库,ADO。NET 数据集,.NET 集合类型,其它数据源或数据格式中查询和传输数据。

所有LINQ查询操作都必包含以下三方面内容:

1. 获取数据源

2. 创建查询

3. 执行查询

下面那张图展示了LINQ查询操作中基本三部分内容这间的依懒关系。从图中可看出,在执行查询操作中必须有查询语语的存在,否则不能从数据源中获取数据。只有创建了查询,执行操作才会对数据进行迭代式处理。




下面看看怎么用代码实现LINQ查询操作基本的三个方面:


static void Main(string[] args)

        {

            // 数据源

            int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

            // 创建查询

            IEnumerable<int> numQuery =

                from num in numbers

                where (num % 2) == 0

                select num;

            // 执行查询

            foreach (int j in numQuery)

            {

                Console.Write("{0,1} ", j);

            }

            Console.Read();

        }
=============================================================

LINQ基本操作


首先我们创建2个类,一个Category,一个Product


public class Product

    {

        public string Name { get; set; }

        public int CategoryID { get; set; }

    }

public class Category

    {

        public string Name { get; set; }

        public int ID { get; set; }

    }




  然后创建2个List的数据源     

static List<Category> categories = new List<Category>()

        {

            new Category(){Name="Beverages", ID=001},

            new Category(){Name="Condiments", ID=002},

            new Category(){Name="Vegetables", ID=003},

            new Category(){Name="Grains", ID=004},

            new Category(){Name="Fruit", ID=005},

            new Category(){Name="Other", ID=006}

        };



      static List<Product> products = new List<Product>()

      {

          new Product{Name="Cola",  CategoryID=001},

          new Product{Name="Tea",  CategoryID=001},

          new Product{Name="Mustard", CategoryID=002},

          new Product{Name="Pickles", CategoryID=002},

          new Product{Name="Carrots", CategoryID=003},

          new Product{Name="Bok Choy", CategoryID=003},

          new Product{Name="Peaches", CategoryID=005},

          new Product{Name="Melons", CategoryID=007},

        };


好了,现在我们开始使用LINQ了,下面使用的表达式和方法的结果是一样的,这里的方法指Lambda表达式

l  使用排序

1.        使用排序时使用的显示语句             

foreach (var c in orderByResult)

                Console.WriteLine("ID={0},Name={1}", c.ID, c.Name);


2.        升序

        表达式



var orderByResult = from c in categories
                            orderby c.ID //默认为升序,也可以在后面加上ascending
                            select c;
            方法

var orderByResult = categories.OrderBy(c=>c.ID);
3.    降序

    表达式   

var orderByResult = from c in categories
                    orderby c.ID descending
                    select c;

    方法 

var orderByResult = categories.OrderByDescending(c=>c.ID);

4.    多个属性的升序

    表达式

var orderByResult = from c in categories

                    orderby c.ID,c.Name

                    select c;


    方法

var orderByResult = categories.OrderBy(c=>c.ID).ThenBy(c=>c.Name);

5.    多个属性的降序排列

    表达式         

var orderByResult = from c in categories

                    orderby c.ID, c.Name descending

                    select c;


    方法

var orderByResult = categories.OrderByDescending(c=>c.ID).ThenByDescending(c=>c.Name);
=======================================================================

LINQ是什么?
它是Language Integrated Query。
当我们要对数据库表进行查询的时候,我们一定会编写"select * from sometable where ID = .."的语句。好,那我们现在根据LINQ的语法,完全可以将我们熟悉的SQL中像"select","from","where"等语句在.NET Framework环境中顺利使用并且大大提高开发的效率。

下面我就牛刀小试,做个demo看看。

1. 先下载LinQ框架 
    现在最新版本是2006年5月发布"Orcas CTP", 下载地址(这里 )

2. 下载安装待完毕。

3. 新建一个"LINQ Console Application"项目。

4. 输入代码如下:   

 1
 2using System;
 3using System.Collections.Generic;
 4using System.Text;
 5using System.Query;
 6using System.Xml.XLinq;
 7using System.Data.DLinq;
 8
 9namespace LINQConsoleApplication1
10{
11    class Program
12    {
13        static void Main(string[] args)
14        {
15            string[] aBunchOfWords = {"One","Two""Hello""World"
16
17"Four""Five"}
;
18            var result = 
19            from s in aBunchOfWords // query the string array 
20            where s.Length == 5     // for all words with length = 5
21            select s;               // and return the string
22            foreach (var s in result) {
23                Console.WriteLine(s); //print
24            }

25        }

26    }

27}

28
29


运行结果如下:
Hello
World
print any key to continue ...

原创粉丝点击