Linq学习(一)
摘要:Linq的强大,相信学过的人都知道了。它是 VS 2008 和 .NET Framework 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁。作用于所有基于IEnumerable<T>接口的源,可以大大简化之前查询、遍历数据源等。主要有LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML。
(一).NET Framework 3.0新特性
学习Linq之前必须先懂的。相比于.NET Framework 2.0,.NET Framework 3.0还是新增了一些实用的功能。
(1)隐含类型局部变量
var userlist = new[] { "aa", "bb", "ac" };
foreach (var user in userlist)
{
Console.WriteLine(user);
}
var 相当好用。编译器自动识别类型,声明是必须赋值。
(2)匿名类型
var data = new { username = "wyf", age = "23" };
Console.WriteLine("username={0},age={1}", data.username, data.age);
(3)扩展方法
public static class Helper
{
public static bool In(this object o,IEnumerable b)
{
foreach (object obj in b)
{
if (obj == o)
return true;
}
return false;
}
}
调用时:Console.WriteLine("1".In(userlist))
1 类必须静态的
2 方法也必须静态的
3 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。
4 在第一个参数前面还需要有一个this关键字。
注意的是扩展方法有“污染性”,所以我觉得在扩展的时候还是想想,是不是值得这样扩展。
(4)自动属性
public string username { get; set; }
public int age { get; set; }
只需get set即可,无需像.Net 2.0那样还需私有字段;
(5)对象自动初始化、集合自动初始化
public class Person
{
public string username { get; set; }
public int age { get; set; }
public override string ToString()
{
return string.Format("username:{0} age:{1}",this.username,this.age);
}
}
var persons=new List<Person>
{new Person{username="wyf",age=23},new Person{username="XHQ",age=22},new Person{username="HZm",age=25},};