Linq的基本操作

最近突然想学学Linq,所以在网上找了一些,并加了一些自己的想法,让大家看看。

一、Linq有两种语法:

1、方法语法

2、查询语法

下面举个例子看看这两种方法的区别

比如现在有一个学生类

public class student

{

    public string username { get; set; }

    public int age { get; set; }

    public string sex { get; set; }

}

我们通过一个方法来添加很多同学

public IList<student> GetStu(int n)

    {

        IList<student> stuList = new List<student>();

        for (int i = 0; i < n; i++)

        {

            student stu = new student();

            stu.age = 25 + i;

            stu.sex = "男" + i;

            stu.username = "张三" + i;

            stuList.Add(stu);

        }

        return stuList;

}

那么这个方法返回的就是一个list集合,下面我们就可以通过linq对这个集合进行操作

首先我们来查询所有的学生

A、查询语法:

   var list = GetStu(10);

    var result = from s in list

          select new { stuname=s.username,sex=s.sex,age=s.age};

这是linq常用的语法from 变量 in 集合

                    Select 变量

B、方法语法

    var result1 = list.Select(s1 => new { username = s1.username, age = s1.age, sex = s1.sex });

    这就是方法语法,符合一般的C#语法

这两种方法的执行结果是一样的,唯一的区别就是语法

二、输出的方式

  输出的方式也有两种,我们知道linq主要对集合进行操作的,所以一般都需要循环输出

第一种输出方式:

         string stt = null;

        foreach (var sa in result)

        {

            stt += sa.username;

        }

        Response.Write(stt);

这是我们经常用到的foreach循环

第二种输出方式:

  result.ToList().ForEach(s => { Response.Write(s.stuname+s.sex+s.age); });

这种方式很简介,直接调用ForEach方法,方法体内是一个limba表达式

另外说明下ToList()方法作用,在linq中有种延迟执行,就是当我们在fromselect时候,返回的结果并没有执行,当我们循环调用的时候才执行,这就是延迟执行,有时候为了立即执行,我们需要用到ToList()

三、下面就来简单说说linq常用的几种查询

1、条件选择查询(where)

   比如我们要查询年龄大于26的学生,可以这样写

var result = from s in list

                     where s.age>26     //条件查询

                 select s.username;

或者这样写

   var result2 = list.Where(s => s.age > 25);   //条件查询  

2、   查询排序

比如我们要按照学生年龄倒序排列查询

var result = from s in list

                     orderby s.age descending    //排序

                     where s.age>26     //条件查询

                  select s.username;

或者这样写

var result3 = list.OrderByDescending(s1 =>s1.age);

3、   数据查询分页显示

使用了Skip和Take方法

Skip作用跳过指定数量的元素

Take的作用是返回指定位置连续数量的元素

      var list1 = GetList(50);

        for (int i = 0; i < 5; i++)

        {

            Response.Write("这是第" + (i + 1) + "页");

            var result = from s in list.Skip(i * 10).Take(10)

                         select s;

            result.ToList().ForEach(s => { Response.Write(s); });

    }

这就是分5页,每页显示10个的分页方式

4|、返回单个元素

用到First()FirstOrDefault(),single,singleOrDefault()

   First():返回第一个元素,如果没有,则抛出异常

   FirstOrDefault():返回第一个元素,如果没有,则返回空,一般情况下会返回null

   Single:返回的是元素中唯一的元素,如果小于一条,则抛出异常

   singleOrDefault:返回的是元素中唯一的元素,如果小于一条,则返回空,通常是null

  var result1 = from r in list1

                      select r;

        var rt = result1.First();

result1.Single()

5.查询姓名是“张三2”的人的全部信息

var Names=from s in result where s.Name.Equals("张三2") select s.Name;

或  var N=from s in result where s.Name.Equals("张三2") select(s =>{Name=s.Name,Age=s.Age,ID=s.ID})

6.查询姓名是“张三2”的并且年龄是27岁以上的

var s=from s in result where s.Name.Equals("张三2") && s.Age>27 select s;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值