`Last()` এবং `LastOrDefault()` দুটোই একটি ভ্যালুর লাস্ট অকারেন্স ফেচ করে। কিন্তু `Last()` এবং `LastOrDefault()`-এর মেজর পার্থক্য হলো `Last()` এক্সসেপশন থ্রো করবে যদি সাপ্লাইড ক্রাইটেরিয়ার জন্য কোনো রেজাল্ট ডেটা না থাকে, অন্যদিকে `LastOrDefault()` ডিফল্ট ভ্যালু (null) রিটার্ন করবে যদি কোনো রেজাল্ট ডেটা না থাকে।
- সিকোয়েন্সে কমপক্ষে একটি এলিমেন্ট থাকবে জানলে Last() ব্যবহার করুন।
- ডেটা নিয়ে নিশ্চিত নন হলে LastOrDefault() ব্যবহার করুন।
উদাহরণ
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();
}
}
}
আউটপুট
LastOrDefault: 1 Jill
Last: 1 Jill
উদাহরণ (ম্যাচ না হলে)
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; }
}
}
আউটপুট
LastOrDefault: null
Last Exception: Sequence contains no matching element
এখানে Id "3" `studentsList`-এ নেই। তাই `LastOrDefault()` null ভ্যালু রিটার্ন করছে, অন্যদিকে `Last()` এক্সসেপশন থ্রো করছে।