9Linq
什么是Linq?
语言集成查询
Linq的作用?
简化查询,主要用于查询使用
Linq的分类:
Linq to object(数组,list集合) :linq操作内存集合,内存里面的数据
Linq to sql(查询数据库用) : linq操作数据库,数据库里的数据
Linq to xml(查询xml文件) : linq 操作xml
Linq语法
var 返回值=from 变量名 in 数据源(可以是数据库,也可以是集合)
orderby 排序
where 变量名.xx=””
join连接查询
select返回
Linq调用方式
1,通过扩展方式调用
List<Student> StudentsNew2 = Students.Where((a) => { return a.Age >= 20; }).ToList();
2,通过表达式方式
Linq的join方法
1,准备两组数据,一组是学生信息,一组是班级信息,关联字段为班级编号
List<Student> Students = new List<Student>()
{
new Student(){ Id=0,Name="张三",Age=18,ClassId=1 },
new Student(){ Id=1,Name="李四",Age=20,ClassId=2 },
new Student(){ Id=2,Name="王五",Age=16,ClassId=2 },
};
List<StudentClass> ClassList = new List<StudentClass>()
{
new StudentClass(){ ClassId=1,ClassName="C#基础班" },
new StudentClass(){ ClassId=2,ClassName="asp.net班" },
new StudentClass(){ ClassId=3,ClassName="mvc班" },
};
2,通过join根据班级编号来查出学生姓名和班级
1),通过表达式方法调用:
//join时,两表的联系用equals来代替等号
var query = from s in Students
join c in ClassList on s.ClassId equals c.ClassId
select new
{
SId = s.Id,
Name = s.Name,
ClassId = c.ClassId,
ClassName = c.ClassName
};
2),通过扩展方法方式调用
var o = Students.Join(ClassList, (a) => { return a.ClassId; }, (b) => { return b.ClassId; },(a, b) =>
{
return
new
{
name = a.Name,
className = b.ClassName
};
});
不过,通过这种方法调用要分析好参数类型,如:
Linq的常用方法
//用于分页的方法
跳过5条
ClassList.Skip(5);
取前3条
ClassList.Take(3);
用于分组的方法
ClassList.OrderBy();
练习:通过Linq对集合进行筛选排序等
1,创建一个对象集合
List<UserInfo> myList = new List<UserInfo>();
myList.Add(new UserInfo() { name = "李清照", age = 23, address = "宋" });
myList.Add(new UserInfo() { name = "黄月英", age = 18, address = "三国" });
myList.Add(new UserInfo() { name = "黄忠", age = 50, address = "三国" });
myList.Add(new UserInfo() { name = "黄某", age = 27, address = "三国" });
myList.Add(new UserInfo() { name = "黄某", age = 35, address = "三国" });
2,根据姓名查询全部字段
var lq = from u in myList
where u.name == "黄某"
select u;
//将查询结果返回
List<UserInfo> newList = lq.ToList();
3,根据地址查询并排序而且返回两个字段(通过一个新对象来返回)
var lq = from u in myList
orderby u.age
where u.address == "三国"
select new UserInfo()
{
name = u.name,
age = u.age
};
//将查询结果返回
List<UserInfo> newList = lq.ToList();
4,根据姓名模糊查询并按年龄降序排序而且返回两个字段(使用匿名对象返回)
//匿名对象适用于只取数据不传递数据
var lq = from u in myList
orderby u.age descending
where u.name.Contains("黄某")
select new
{
name = u.name,
age = u.age
};
foreach (var item in lq)
{
Console.WriteLine(string.Format("姓名:{0},年龄:{1},地址:", item.name, item.age));
}