LINQ to SQL的First/FirstOrDefault和Single/SingleOrDefault

First/FirstOrDefault其实返回集合中的一个元素,其实质就是在SQL语句中加TOP (1),多与OrderBy()组合使用。

First()两种方法:

  • First()返回结果集中第一个匹配的元素,如果找不到匹配元素会抛出异常。
  • First(Predicate)基于你提供的条件返回结果集中第一个匹配的元素,如果找不到匹配元素会抛出异常。

FirstOrDefault()两种方法:

  • FirstOrDefault()返回结果集中第一个匹配的,如果找不到会返回默认的元素default(TSource)。
  • FirstOrDefault(Predicate)基于你提供的条件返回结果集中第一个匹配的,如果找不到会返回默认的元素default(TSource)。

Single()两种方法:

  • Single()返回结果集中唯一的元素,如果找不到匹配元素会抛出异常,如果多于一个,也抛出异常。
  • Single(Predicate)基于你提供的条件回结果集中唯一的元素,如果找不到匹配元素会抛出异常,如果多于一个,也抛出异常。

SingleOrDefault()两种方法:

  • SingleOrDefault()返回结果集中唯一的元素,如果找不到会返回默认的元素default(TSource),如果多于一个,抛出异常。
  • SingleOrDefault(Predicate)基于你提供的条件返回结果集中唯一的元素,如果找不到会返回默认的元素default(TSource),如果多于一个,抛出异常。

一个员工安排到一辆车上,一辆车可以有很多员工,车牌号和员工号是一对多的关系。
员工类

public class Employee
{
       /// 
       /// 车牌号
       /// 
       public int CarNo { get; set; }

       /// 
       /// 员工号
       /// 
       public string EmployeeNo { get; set; }

       /// 
       /// 描述
       /// 
       public string Description { get; set; }

       /// 
       /// 年龄
       /// 
       public int Age { get; set; }
}

获取员工数据方法

public static List GetList()
{
        return new List()
        {
                 new Employee(){ CarNo=1,EmployeeNo="NO-1",Description ="广州分公司",Age=21},
                 new Employee(){ CarNo=2,EmployeeNo="NO-2",Description ="惠州分公司",Age=30},
                 new Employee(){ CarNo=3,EmployeeNo="NO-3",Description ="东莞分公司",Age=27},
                 new Employee(){ CarNo=4,EmployeeNo="NO-4",Description ="广州分公司",Age=28},
                 new Employee(){ CarNo=3,EmployeeNo="NO-4",Description ="东莞分公司",Age=52},
                 new Employee(){ CarNo=1,EmployeeNo="NO-5",Description ="深圳分公司",Age=18},
                 new Employee(){ CarNo=1,EmployeeNo="NO-6",Description ="中山分公司",Age=21},
                 new Employee(){ CarNo=2,EmployeeNo="NO-7",Description ="广州分公司",Age=31},
                 new Employee(){ CarNo=5,EmployeeNo="NO-8",Description ="佛山分公司",Age=19},
                 new Employee(){ CarNo=6,EmployeeNo="NO-9",Description ="深圳分公司",Age=20}
        };
}

First/FirstOrDefault
获取年龄大于25岁的所有员工信息中年龄最小的员工信息

var employeeList = Employee.GetList();
var list = employeeList.Where(x => x.Age > 25).OrderBy(x => x.Age);
StringBuilder sb = new StringBuilder();
sb.Append("得到的结果集:
"); foreach (var item in list) { sb.AppendFormat("员工号{0},描述:{1},年龄:{2}
", item.EmployeeNo, item.Description, item.Age); } sb.Append("

"); sb.Append("结果集的第一个元素:
"); var em = list.First(x => x.Age > 25); sb.AppendFormat("员工号{0},描述:{1},年龄:{2}
", em.EmployeeNo, em.Description, em.Age);

输出结果:

得到的结果集:
员工号NO-3,描述:东莞分公司,年龄:27
员工号NO-4,描述:广州分公司,年龄:28
员工号NO-2,描述:惠州分公司,年龄:30
员工号NO-7,描述:广州分公司,年龄:31
员工号NO-4,描述:东莞分公司,年龄:52


结果集的第一个元素:
员工号NO-3,描述:东莞分公司,年龄:27

你可能感兴趣的:(LINQ to SQL的First/FirstOrDefault和Single/SingleOrDefault)