C#之LINQ与XML
LINQ
1. LINQ is a bridge over object-oriented languages and relational database.
2. 注意查询格式与SQL的不同:
Customer是一个类,customers是一个list容器,里面的数据是Customer型的。
IEnumerable<Customer> result = from customer in customers where customer.FirstName == "Donna“ select customer;
from后面是该查询语句的内部变量,where后面接条件,select接内部变量,result是查询结果
同时需注意result代表的不是当前数据库或数据的查询结果,而是代表这个查询过程,也就是说result后的结果在数据修改前后可能是不同的。
3. 当需要保存查询结果时,可以用 ToList () or the ToArray() 来保存当前查询的结果
IEnumerable<Customer> result = from customer in customers where customer.FirstName == "Donna“ select customer;
List<Customer> cachedResult = result.ToList<Customer>();
4. 对数据集合的操作:join(取交集), grouping(分组), aggregation(合并), and sorting.
[data source 1] join [data source 2] on [join condition]
例如: from customer in customers join address in addresses on customer.Name equals address.Name 就是对客户名字与家庭地址相同的数据取交集
var result = from address in addresses
group address by address.Name;
注意分组之后的结果相当于一个二维数组
而对于排序:from customer in Customers orderby customer.LastName select customer 默认为升序
tips:对于select的变量如果未定义其类型,则可以用var交给编译器去推断。
5. Extension Methods可以简化查询语句,但是有很多限制
Lambda Expressions in LINQ : IEnumerable<Customer> result = customers.Where( customer => customer.FirstName == "Donna“ ) ;
XML
1. eXtensible Markup Language 的格式
2. 将数据库变为XML文档
该文档是Customers,里面的元素是Customer,每个Customer都有FirstName, LastName, EmailAdress。
3. XML的序列化与反序列化
XmlSerializer serializer = new XmlSerializer(typeof(Customer));
序列化之后的结果。数据需要序列化以后传输。
而反序列化是将一个接收到的XML转换为本地可处理的文本。