Custom Delegates এবং LINQ Methods দুটি গুরুত্বপূর্ণ ধারণা যা LINQ (Language Integrated Query) এবং C# প্রোগ্রামিংয়ের মধ্যে ব্যবহৃত হয়। LINQ ব্যবহার করার সময় কাস্টম ডিলিগেট এবং কাস্টম LINQ মেথডের সাহায্যে আপনি আরো জটিল কুয়েরি বা ডেটা প্রসেসিং করতে পারেন।
এখানে আমরা আলোচনা করব কাস্টম ডিলিগেট তৈরি করা এবং LINQ মেথডের মাধ্যমে কাস্টম অপারেশন কিভাবে সম্পন্ন করা যায়।
ডেলিগেট C# এ একটি টাইপ যা মেথডের রেফারেন্স ধারণ করে। এটি প্যারামিটার হিসেবে মেথড গ্রহণ করতে পারে এবং সেই মেথডের কার্যাবলী চালাতে পারে। যখন আপনি Custom Delegates ব্যবহার করবেন, তখন আপনি নিজের মতো মেথড সিগনেচার এবং কার্যপদ্ধতি তৈরি করতে পারবেন, যা LINQ বা অন্যান্য C# প্রোগ্রামিং টাস্কের জন্য উপযোগী হতে পারে।
// Custom Delegate Declaration
public delegate bool EmployeeFilter(Employee emp);
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public string Position { get; set; }
}
class Program
{
static void Main(string[] args)
{
// Sample list of Employees
List<Employee> employees = new List<Employee>
{
new Employee { Name = "John", Age = 25, Position = "Software Engineer" },
new Employee { Name = "Jane", Age = 32, Position = "Manager" },
new Employee { Name = "Jake", Age = 28, Position = "Developer" }
};
// Define custom delegate to filter employees older than 30
EmployeeFilter filterOlderThan30 = emp => emp.Age > 30;
// Use delegate to filter employees
var filteredEmployees = employees.Where(emp => filterOlderThan30(emp)).ToList();
// Display filtered employees
foreach (var employee in filteredEmployees)
{
Console.WriteLine($"{employee.Name}, {employee.Age}");
}
}
}
এখানে:
EmployeeFilter
হল একটি কাস্টম ডেলিগেট যা Employee
অবজেক্টকে প্যারামিটার হিসেবে নেবে এবং একটি bool
রিটার্ন করবে।filterOlderThan30
হল একটি কাস্টম ডেলিগেট যা Employee
অবজেক্টের বয়সের ওপর ভিত্তি করে ফিল্টার করবে।Where
মেথডে কাস্টম ডেলিগেটটি ব্যবহার করা হয়েছে।LINQ মেথডগুলি হল এক ধরনের extension methods যা IEnumerable এবং IQueryable ইন্টারফেসে যোগ করা হয়। আপনি যদি LINQ এর মধ্যে কিছু কাস্টম অপারেশন করতে চান, তবে আপনি নিজেই কাস্টম LINQ মেথড তৈরি করতে পারেন। এই মেথডগুলি ডেটার উপর বিশেষ কাস্টম ফিল্টার, সিলেকশন, অথবা অন্যান্য অপারেশন করতে সহায়তা করে।
LINQ মেথডস সাধারণত অনেক ধরনের built-in অপারেশন সরবরাহ করে (যেমন Select()
, Where()
, OrderBy()
, GroupBy()
, ইত্যাদি), তবে আপনি চাইলে কাস্টম LINQ মেথডও তৈরি করতে পারেন যা একটি নির্দিষ্ট অপারেশন সম্পাদন করবে।
এখানে একটি কাস্টম LINQ মেথড তৈরি করার উদাহরণ দেওয়া হল যা একটি ইন্টিজার লিস্টে সমস্ত পজিটিভ নাম্বারগুলো ফিল্টার করবে:
// Custom LINQ Method Declaration
public static class CustomLinqMethods
{
public static IEnumerable<int> FilterPositiveNumbers(this IEnumerable<int> source)
{
foreach (var number in source)
{
if (number > 0)
yield return number;
}
}
}
class Program
{
static void Main(string[] args)
{
// List of integers
List<int> numbers = new List<int> { -10, 5, 0, 15, -20, 30 };
// Use custom LINQ method
var positiveNumbers = numbers.FilterPositiveNumbers();
// Display filtered numbers
foreach (var num in positiveNumbers)
{
Console.WriteLine(num); // Output: 5, 15, 30
}
}
}
এখানে:
FilterPositiveNumbers
একটি কাস্টম LINQ মেথড যা ইন্টিজারের লিস্টের মধ্যে পজিটিভ নাম্বারগুলো ফিল্টার করে রিটার্ন করবে।this IEnumerable<int>
ব্যবহার করা হয়েছে যাতে এটি একটি extension method হয়ে কাজ করে, যা আপনি যে কোনো ইন্টিজার লিস্টে ব্যবহার করতে পারেন।LINQ কুয়েরিতে custom delegates ব্যবহার করলে আপনি কাস্টম ফিল্টারিং, ম্যানিপুলেশন বা কোনো নির্দিষ্ট লজিক প্রয়োগ করতে পারবেন যা ডিফল্ট LINQ অপারেশন দ্বারা সম্ভব নয়। যেমন, যদি আপনি একটি নির্দিষ্ট কন্ডিশনে custom delegate ব্যবহার করতে চান, তাহলে LINQ কুয়েরিতে সেটি প্রয়োগ করতে পারবেন।
// Custom Delegate
public delegate bool NumberCondition(int number);
// Custom LINQ method to apply delegate logic
public static class CustomLinqMethods
{
public static IEnumerable<int> FilterByCondition(this IEnumerable<int> source, NumberCondition condition)
{
foreach (var number in source)
{
if (condition(number))
yield return number;
}
}
}
class Program
{
static void Main(string[] args)
{
// Sample list of numbers
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Custom delegate to filter even numbers
NumberCondition isEven = n => n % 2 == 0;
// Use custom LINQ method to apply delegate
var evenNumbers = numbers.FilterByCondition(isEven);
// Display the even numbers
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // Output: 2, 4, 6, 8, 10
}
}
}
এখানে:
FilterByCondition
একটি কাস্টম LINQ মেথড যা custom delegate ব্যবহার করে ডেটাকে ফিল্টার করে।NumberCondition
ডেলিগেট ব্যবহার করা হয়েছে, যা নম্বরটি even কিনা তা যাচাই করে।common.read_more