美文网首页
LINQ to SQL的First/FirstOrDefault

LINQ to SQL的First/FirstOrDefault

作者: 子武不是字母 | 来源:发表于2016-11-23 14:18 被阅读81次

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

    First()两种方法:

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

    FirstOrDefault()两种方法:

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

    Single()两种方法:

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

    SingleOrDefault()两种方法:

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

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

    public class Employee
    {
           /// <summary>
           /// 车牌号
           /// </summary>
           public int CarNo { get; set; }
    
           /// <summary>
           /// 员工号
           /// </summary>
           public string EmployeeNo { get; set; }
    
           /// <summary>
           /// 描述
           /// </summary>
           public string Description { get; set; }
    
           /// <summary>
           /// 年龄
           /// </summary>
           public int Age { get; set; }
    }
    

    获取员工数据方法

    public static List<Employee> GetList()
    {
            return new List<Employee>()
            {
                     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("得到的结果集:<br/>");
    foreach (var item in list)
    {
             sb.AppendFormat("员工号{0},描述:{1},年龄:{2}<br/> ", item.EmployeeNo, item.Description, item.Age);
    }
    sb.Append("<br/><br/>");
    
    sb.Append("结果集的第一个元素:<br/>");
    var em = list.First(x => x.Age > 25);
    sb.AppendFormat("员工号{0},描述:{1},年龄:{2}<br/> ", 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

          本文链接:https://www.haomeiwen.com/subject/sckvpttx.html