Linq to Object

微软在.Net Framework 3.5 中推出了 Linq 技术,

Linq – 即是 Language Integerated Query (语言集成查询),

其主要综合了对 Object ,DataSet , SQL Server , XML 的查询,

当然对于 SQL Server 的查询需要解释一下就是本身名字并非是 Linq to SQL Server,

而是 Linq to SQL ,只不过现在的 Linq 暂时还只支持 Sql Server 数据库,

对 DB2 和 Oracle 暂时还不支持。

首先还是从 Linq to Object 说起吧,

Linq to Object 是一种是用 Linq 技术对 Object 类型进行的查询操作,

但是并不是所有的 Object 都是可以使用 Linq 来进行查询的,

只有实现了 IEnumberable 或者 IEnumberable<T> 接口的集合对象,

才可以使用 Linq 技术来完成查询操作,

事实上,在 Linq to DataSet 中,

也要求 DataTable 直接或者间接的实现上面谈到的两个接口,

下面就来看一个 Demo 吧

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

namespace CSharpLanguage
{
    public partial class Demo__5 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //这个就是最简单的 Linq 查询技术了
            //即 Linq to Object
            //但是需要注意的是这个 Object 必须实现了 IEnumerable 或者
            //IEnumerable<T> 接口的集合对象
            //否则无法完成查询
            //public class List<T> : IList<T>, ICollection<T>,
            //IEnumerable<T>, IList, ICollection, IEnumerable
            //由此可见 List<T> 同时实现了 IEnumerable 和 IEnumerable<T> 接口
            //故完全可以使用 Linq to Object 技术来执行查询操作

            //这里还使用了一定 C# 3.0 中新增的技术,

            //就是在定义集合时可以使用如下方式进行初始化
            List<string> myList = new List<string> { "23", "BaoBeiMe", "XiaoZhen" };
            myList.Add("12.6");
            myList.Add("Me");
            myList.Add("Perfect");
            myList.Add("Beautiful");
            var result = from p in myList
                         select p;

            foreach (var value in result)
            {
                Response.Write(value + "-----");
            }

            //使用 Linq to Object 来查询指定目录下的所有的歌曲文件
            //指定歌曲所在的目录

            string dirPath = "F:\\音乐\\My Love";

            //查询出目录中所有的.mp3格式的歌曲文件的完整路径
            //这里就是一个典型的 Linq to Object 的例子

            var music = from p in GetMusicList(dirPath)
                        where p.Extension.ToLower()==".mp3"
                        select p.FullName;

            foreach (var p in music)
            {
                Response.Write(p.ToString() + "<br/>");
            }

        }

        private List<FileInfo> GetMusicList(string dirPath)
        {
            //建立 FileInfo 类型的泛型集合对象
           List<FileInfo> myMusicList = new List<FileInfo>();
            //也就是指定的目录不存在
            if (!Directory.Exists(dirPath))
            {
                return null;
            }
            else
            {
                DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
                //遍历这个目录下的所有文件,并且添加到泛型集合对象中
                foreach (FileInfo file in dirInfo.GetFiles())
                {
                    myMusicList.Add(file);
                }
                return myMusicList;
            }           
        }
    }
}

以上就是整个 Demo 的 Code-Behind 中的代码了,

再附上以个截图吧

image

其实 Demo 真的是好简单的,不过呢,其中涉及的几个要点还是必须掌握的,

一个就是要熟悉 Linq 语句的基本表示,

其二就是要明确凡是要使用 Linq to Object 进行查询的对象,

均必须至少实现 IEnumberable 和 IEnumberable<T> 中的一个。

                                                        2010—2—01

posted @ 2010-03-01 13:17  小宝马的爸爸  阅读(685)  评论(0编辑  收藏  举报