LINQ Except মেথড ব্যবহার করে একটি ডেটা সংগ্রহ থেকে অন্য একটি ডেটা সংগ্রহের উপাদানগুলো বাদ দিতে পারেন। এটি দুটি সংগ্রহের মধ্যে যেসব উপাদান প্রথম সংগ্রহে আছে কিন্তু দ্বিতীয় সংগ্রহে নেই, সেই উপাদানগুলো প্রদান করে। সহজভাবে বললে, Except মেথডটি দুটি সংগ্রহের পার্থক্য বের করে দেয়।
Except মেথড দুটি সংগ্রহের উপাদান তুলনা করে এবং প্রথম সংগ্রহের এমন উপাদানগুলোকেই নির্বাচন করে যেগুলি দ্বিতীয় সংগ্রহে নেই। এটি সাধারণত ডেটার তুলনা এবং ফিল্টারিং করতে ব্যবহৃত হয়।
IEnumerable<T> Except(IEnumerable<T> second);
এখানে:
T
: উপাদানের ধরন (যেমন, int, string, বা যে কোনো কাস্টম টাইপ)second
: দ্বিতীয় সংগ্রহ (যা প্রথম সংগ্রহের উপাদানগুলোর সঙ্গে তুলনা করা হয়)ধরা যাক, আপনার কাছে দুটি তালিকা রয়েছে, এবং আপনি চান যে প্রথম তালিকার এমন উপাদানগুলো বের করা হোক, যেগুলি দ্বিতীয় তালিকায় নেই।
List<int> list1 = new List<int> { 1, 2, 3, 4, 5 };
List<int> list2 = new List<int> { 3, 4, 5, 6, 7 };
// Except ব্যবহার করে list1 থেকে list2 এর উপাদান বাদ দেওয়া
var result = list1.Except(list2);
foreach (var item in result)
{
Console.WriteLine(item); // Output: 1, 2
}
এখানে Except মেথডটি list1
থেকে 3, 4, 5 বাদ দিয়ে 1, 2
উপাদানগুলো ফিরিয়ে দিয়েছে, কারণ এই উপাদানগুলো list2
তে নেই।
Except
সঠিকভাবে কাজ করবে না যতক্ষণ না আপনি সেই অবজেক্টের সমতা নির্ধারণ (equality comparison) সঠিকভাবে সেট না করেন। এর জন্য আপনাকে IEqualityComparer<T>
ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।ধরা যাক, আপনার কাছে একটি কাস্টম ক্লাস Person
আছে এবং আপনি দুইটি List এর মধ্যে পার্থক্য বের করতে চান:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
var person = obj as Person;
return person != null && Name == person.Name && Age == person.Age;
}
public override int GetHashCode()
{
return Name.GetHashCode() ^ Age.GetHashCode();
}
}
List<Person> list1 = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
List<Person> list2 = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "David", Age = 40 }
};
// Except ব্যবহার করে list1 থেকে list2 এর Person বাদ দেওয়া
var result = list1.Except(list2);
foreach (var person in result)
{
Console.WriteLine($"{person.Name}, {person.Age}");
// Output: Bob, 25
// Charlie, 35
}
এখানে Equals এবং GetHashCode মেথডটি Person ক্লাসে কাস্টমাইজ করা হয়েছে যাতে Except সঠিকভাবে Person
অবজেক্টগুলির তুলনা করতে পারে।
LINQ এর Except মেথড দুটি সংগ্রহের মধ্যে যেসব উপাদান একত্রে থাকে না, শুধুমাত্র সেগুলিকে বের করে। এটি ডেটা ফিল্টার এবং তুলনা করার জন্য অত্যন্ত কার্যকরী, বিশেষ করে যখন আপনাকে দুটি সংগ্রহের পার্থক্য বের করতে হয়।
common.read_more