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,通过表达式方式
image


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

                  };
              });

不过,通过这种方法调用要分析好参数类型,如:

image



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));
}
posted @ 2021-11-02 17:19  青仙  阅读(187)  评论(0编辑  收藏  举报