silver

前途迷茫。。。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
这几天看了c#数据访问,觉得比较琐碎,所以就挑了LINQ来写下心得。
 
LINQ有很多语法,有SQL编程基础的话就可以很容易上手,这里主要讲下VS2008下的LINQ应用。

 

1.引用LINQ
 
LINQ.NET3.5的的一个新特性,也是C#3.0的亮点
所以要在新项目里引用LINQ时,一定要注意检查新建项目是否使用的是.NET3.5,一定要选择.NET Framework 3.5
 
 
 

如果选择的是.NET Framework 2.0 .NET Framework 3.0,将会出现如下情况,某些组件引用不了。

 

 

刚开始接触LINQ,难免发生这种低级错误。(我就发生了)

 

 

2.多字段查询

 

虽然说SQLLINQ很相似,但两者还是有区别的。

 

LINQ不允许在SELECT 中使用多个字段查询,必须使用SELECT子句创建一个新对象保存查询结果,

 

看下代码:

 

var results =

 from u in user

 where u.UserID == “zplutor”

 select new {u. UserID ,u.RealName,u.Telephone,u.QQ,u.Email}

 

 

select new {…} 这里用的是C#3.0匿名类型。

 

所谓的“匿名类型”,就是在需要能够临时将一批具有一定关联的数据存放起来的对象时,

 

使用没有类型名字的new表达式,并用对象初始化器进行初始化。

 

 

3. 集合运算符

 

集合演算法包括Distinct,Union,Intersect,Except

 

Distinct 作用是从集合中移除重复值。

 

Union(交集) 作用是返回两个集合中任一集合内的唯一元素。

 

Intersect(合集)作用是发挥同时出现在两个集合中的元素。

 

Except(差集)返回位于一个集合但不在另外一个集合的元素。

 

这里主要是看下应用,理论上跟SQL编程是差不多。

 

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

namespace ConsoleApplication12
{
    class Program
    {
        static void Main(string[] args)
        {
            LinqTest.Linq();
        }

    }
    class LinqTest
    {

        public static void Linq()
        {
            //测试数据
            int[] numbers = { 2, 2, 3, 5, 5 };
            int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
            int[] numbersB = { 1, 3, 5, 7, 8 };

 

            //Distinct的使用
            var distinctNumbers = numbers.Distinct();

            Console.WriteLine("Distinct Numbers:");

            foreach (var f in distinctNumbers)

                Console.WriteLine(f);

 

            //Union的使用
            var unionNumbers = numbersA.Union(numbersB);

            Console.WriteLine("Union numbers:");

            foreach (var n in unionNumbers)

                Console.WriteLine(n);

 

            //Intersect的使用
            var intersectNumbers = numbersA.Intersect(numbersB);

            Console.WriteLine("Intersect numbers:");

            foreach (var n in intersectNumbers)

                Console.WriteLine(n);

 

            //Except的使用
            var exceptNumbers = numbersA.Except(numbersB);

            Console.WriteLine("Except Numbers:");

            foreach (var n in exceptNumbers)

                Console.WriteLine(n);

        }

    }

}

 

 测试结果: 

 

 

 

4.LINQ排序

 

单单返回一个结果集合是不够的,为了方便查找,还需要排序。


这里要用到orderby子句 或 thenby方法语句,默认是升序。


如果要倒序还需要使用descending子句,descending 是可选的。

 

 

这用的是查询语句的多级排序:


    var results = 
         from u in User
         orderby u.UserID,u.QQ descending
         select new{u.UserID,u.QQ}
         ;

 

 

如果用的是方法语法,那就用thenby方法语法:


var results = User.OrderBy(u => u.UserID).ThenBy(u => u.QQ).Select(u => new{u.UserID,u.QQ})


太长了,比较难以看懂。

 

 

我觉得方法语法更偏向于c#语句,而查询语句则跟SQL十分相似。


我更偏向于查询语句,更加方便直观,或许是我之前学SQL的关系吧。


不过我偏向喜欢查询语句也是有科学根据的:

 

 

VS2008在线帮助推荐,尽可能使用查询语法,仅在需要时使用方法语法。

                                                                                                                        ——《C#入门经典》


posted on 2009-07-26 02:02  silverVan  阅读(358)  评论(0)    收藏  举报