Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Khác biệt Last() vs LastOrDefault() trong LINQ C#

Cả Last() và LastOrDefault() đều lấy occurrence cuối cùng của giá trị. Nhưng khác biệt chính: Last() ném exception nếu không có dữ liệu khớp criteria, trong khi LastOrDefault() trả về giá trị mặc định (null) nếu không có dữ liệu.

  • Dùng Last() khi chắc chắn sequence có ít nhất một element.
  • Dùng LastOrDefault() khi không chắc về dữ liệu.

Ví dụ 1: Có dữ liệu khớp

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApp
{
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    class Program
    {
        static void Main()
        {
            var studentsList = new List
            {
                new Student { Id = 1, Name = "John" },
                new Student { Id = 2, Name = "Jack" },
                new Student { Id = 1, Name = "Jill" }
            };

            var lastOrDefaultStudent = studentsList.LastOrDefault(student => student.Id == 1);
            var lastStudent = studentsList.Last(student => student.Id == 1);

            Console.WriteLine($"LastOrDefault: {lastOrDefaultStudent.Id} {lastOrDefaultStudent.Name}");
            Console.WriteLine($"Last: {lastStudent.Id} {lastStudent.Name}");
            Console.ReadLine();
        }
    }
}

Kết quả

LastOrDefault: 1 Jill
Last: 1 Jill

Ví dụ 2: Không có dữ liệu khớp

using System;
using System.Collections.Generic;
using System.Linq;

namespace DemoApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var studentsList = new List
                {
                    new Student { Id = 1, Name = "John" },
                    new Student { Id = 2, Name = "Jack" }
                };

                var lastOrDefaultStudent = studentsList.LastOrDefault(student => student.Id == 3);
                var value = lastOrDefaultStudent == null ? "null" : "";
                Console.WriteLine($"LastOrDefault: {value}");

                var lastStudent = studentsList.Last(student => student.Id == 3);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Last Exception: {ex.Message}");
                Console.ReadLine();
            }
        }
    }

    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

Kết quả

LastOrDefault: null
Last Exception: Sequence contains no matching element

Id "3" không có trong studentsList. Do đó LastOrDefault() trả về null, còn Last() ném exception.