看了一下LINQ,之前一点儿概念都没有,所以看完之后朦朦胧胧。所以总结一下,希望能再明白一点儿。
首先,LINQ的作用就是用相同的语法访问不同的数据源,包括文件,XML,数据库,注册表,事件日志,活动目录或者第三方(如Fickr)数据。LINQ可以将上述数据做为对象使用,能够更好地与编程模型集成,LINQ的目标是降低访问数据的复杂度。
LINQ包括5个部分:LINQ to Objects,LINQ to DataSets,LINQ to SQL,LINQ to Entities和LINQ to XML。所有的LINQ查询都包括三个不同的操作:获取数据源,创建查询,执行查询。
下面写出几个简单的使用方法,先从简单的开始
LINQ to XML:它是使用LINQ查询和过滤XML数据的技术。他在System.Xml.Linq命名空间中定义了基于元素的新XML类,而System.Xml类是基于文档的。
//获取数据源
XmlDocument doc = new XmlDocument();
string path = Server.MapPath("a.xml");
XElement stulist = XElement.Load(path);
//创建查询
var stus = from r in stulist.Elements("学生")
where r.Element("性别").Value == "男"
orderby r.Element("姓名")
select r;
foreach (XElement node in stus)
{
Response.Write(node);
}
XmlDocument doc = new XmlDocument();
string path = Server.MapPath("a.xml");
XElement stulist = XElement.Load(path);
//创建查询
var stus = from r in stulist.Elements("学生")
where r.Element("性别").Value == "男"
orderby r.Element("姓名")
select r;
foreach (XElement node in stus)
{
Response.Write(node);
}
LINQ to Objects:
//获取数据源
List<Man> manlist = new List<Man>();
manlist.Add(new Man("李天平", "男"));
manlist.Add(new Man("李嘉诚", "男"));
manlist.Add(new Man("徐静蕾", "女"));
//创建查询
var mans = from r in manlist
where r.Sex == "男"
orderby r.Name descending
select r;
//执行查询
foreach (Man man in mans)
{
Response.Write(man.Name + "," + man.Sex + "<br>");
}
List<Man> manlist = new List<Man>();
manlist.Add(new Man("李天平", "男"));
manlist.Add(new Man("李嘉诚", "男"));
manlist.Add(new Man("徐静蕾", "女"));
//创建查询
var mans = from r in manlist
where r.Sex == "男"
orderby r.Name descending
select r;
//执行查询
foreach (Man man in mans)
{
Response.Write(man.Name + "," + man.Sex + "<br>");
}
LINQ to SQL:使用LINQ to SQL查询访问数据库,必须对对象类和数据库中的表建立映射,指定哪个属性映射哪个字段。为实现映射,LINQ提供了DataContext类。
DataContext类在System,Data.Linq命名空间下,用于把查询语法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
//定义映射类
[Table(Name="P_Product")]
public class Product
{
[Column(IsPrimaryKey=true)]
public int ID{get; set;}
[Column(Name="Name")]
public string Name{get; set;}
[Column(Name="Desc")]
public string Desc{get; set;}
}
//获取数据源
string connectionString = "data source=127.0.0.1;Database=test;user id=sa;password=";
DataContext db = new DataContext(connectionString);
Table<Product> prolist = db.GetTable<Product>();
//创建查询
var pros = from p in prolist
where p.Price > 1
orderby p.ID
select p;
//执行查询
foreach (Product pro in pros)
{
Response.Write(pro.Name + "," + pro.Price.ToString() + "<br>");
}
DataContext db = new DataContext(connectionString);
Table<Product> prolist = db.GetTable<Product>();
//创建查询
var pros = from p in prolist
where p.Price > 1
orderby p.ID
select p;
//执行查询
foreach (Product pro in pros)
{
Response.Write(pro.Name + "," + pro.Price.ToString() + "<br>");
}
由此可见,三种查询的步骤基本都是:获取数据源,创建查询,执行查询(LINQ to SQL 还要创建映射类)
因为上述数据源的数据类型都是数组类型,而数组类型默认支持泛型IEnumberable<(Of<T>)>接口。。。我好像不是很明白。。。这样才使得LINQ在执行查询的时候可以使用foreach来实现对数据的迭代式访问。
先写这么多,隔了两天,而且在写的时候有重新想了一下,收获还是有的,这里面的代码都是书上的,不是我自己编的,notice。