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 中的代码了,
再附上以个截图吧
其实 Demo 真的是好简单的,不过呢,其中涉及的几个要点还是必须掌握的,
一个就是要熟悉 Linq 语句的基本表示,
其二就是要明确凡是要使用 Linq to Object 进行查询的对象,
均必须至少实现 IEnumberable 和 IEnumberable<T> 中的一个。
2010—2—01