ডেটা প্রজেকশন (Data Projection) হল LINQ-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যার মাধ্যমে আপনি একটি ডেটা সোর্সের থেকে নির্বাচিত ডেটাকে একটি নতুন ফরম্যাটে বা টাইপে রূপান্তর করতে পারেন। প্রজেকশন দ্বারা আপনি ডেটার কোনো নির্দিষ্ট অংশ বা একটি নতুন অবজেক্ট তৈরি করতে পারেন।
LINQ এ ডেটা প্রজেকশন সাধারণত Select বা SelectMany মেথডের মাধ্যমে করা হয়। Select মেথড ব্যবহার করে আপনি একটি নতুন ফরম্যাটে ডেটা বের করতে পারেন, যেমন একটি নির্দিষ্ট প্রপার্টি, একটি অবজেক্ট, বা একটি কাস্টম ক্লাস।
LINQ এর Select মেথড ব্যবহার করে আপনি ডেটাকে প্রজেক্ট বা রূপান্তর করতে পারেন। এটি একটি কোলেকশন থেকে নির্দিষ্ট প্রপার্টি বা তথ্য বের করার জন্য ব্যবহৃত হয়।
var result = from item in dataSource
select new { item.Property1, item.Property2 };
এখানে,
List<Customer> customers = new List<Customer>
{
new Customer { CustomerID = 1, Name = "Alice", City = "New York" },
new Customer { CustomerID = 2, Name = "Bob", City = "London" },
new Customer { CustomerID = 3, Name = "Charlie", City = "Paris" }
};
// Select দিয়ে নাম এবং শহর বের করা
var customerNamesAndCities = from c in customers
select new { c.Name, c.City };
foreach (var customer in customerNamesAndCities)
{
Console.WriteLine($"Name: {customer.Name}, City: {customer.City}");
}
// Output:
// Name: Alice, City: New York
// Name: Bob, City: London
// Name: Charlie, City: Paris
এখানে Customer ক্লাসের Name এবং City প্রপার্টি নির্বাচন করা হয়েছে।
class CustomerInfo
{
public string Name { get; set; }
public string City { get; set; }
}
List<Customer> customers = new List<Customer>
{
new Customer { CustomerID = 1, Name = "Alice", City = "New York" },
new Customer { CustomerID = 2, Name = "Bob", City = "London" },
new Customer { CustomerID = 3, Name = "Charlie", City = "Paris" }
};
// Select দিয়ে কাস্টম ক্লাসের অবজেক্ট তৈরি করা
var customerInfoList = from c in customers
select new CustomerInfo { Name = c.Name, City = c.City };
foreach (var customer in customerInfoList)
{
Console.WriteLine($"Name: {customer.Name}, City: {customer.City}");
}
// Output:
// Name: Alice, City: New York
// Name: Bob, City: London
// Name: Charlie, City: Paris
এখানে CustomerInfo
ক্লাসের ইনস্ট্যান্স তৈরি করা হয়েছে এবং তাতে Name এবং City প্রপার্টি ধারণ করা হয়েছে।
SelectMany মেথড ব্যবহার করে আপনি Nested Collections বা Collection of Collections থেকে ডেটা প্রজেক্ট করতে পারেন। এটি একটি কোলেকশনের প্রতিটি উপাদান থেকে আরও একটি কোলেকশন বের করে এবং সেগুলিকে একত্রিত করে একটি নতুন ফ্ল্যাট কোলেকশন তৈরি করে।
var result = dataSource.SelectMany(item => item.Collection);
এখানে,
class Customer
{
public string Name { get; set; }
public List<string> Orders { get; set; }
}
List<Customer> customers = new List<Customer>
{
new Customer { Name = "Alice", Orders = new List<string> { "Order1", "Order2" } },
new Customer { Name = "Bob", Orders = new List<string> { "Order3", "Order4" } },
new Customer { Name = "Charlie", Orders = new List<string> { "Order5" } }
};
// SelectMany দিয়ে প্রতিটি কাস্টমারের অর্ডার বের করা
var allOrders = customers.SelectMany(c => c.Orders);
foreach (var order in allOrders)
{
Console.WriteLine(order);
}
// Output:
// Order1
// Order2
// Order3
// Order4
// Order5
এখানে SelectMany
ব্যবহার করে Customer ক্লাসের Orders লিস্ট থেকে সমস্ত অর্ডার একত্রিত করা হয়েছে।
LINQ এ ডেটা প্রজেকশন একটি শক্তিশালী পদ্ধতি যা ডেটাকে একটি নির্দিষ্ট ফরম্যাটে রূপান্তর করতে সাহায্য করে। Select এবং SelectMany মেথড ব্যবহার করে আপনি কাস্টম অবজেক্ট, অ্যানোনিমাস অবজেক্ট বা একটি একক ফ্ল্যাট কোলেকশন তৈরি করতে পারেন। এটি ডেটা ম্যানিপুলেশনকে আরও সহজ এবং কার্যকরী করে তোলে।
Anonymous Types হল C# এর একটি বৈশিষ্ট্য যা আপনাকে একটি নতুন টাইপ তৈরি করতে দেয়, যার জন্য আপনি কোন ক্লাস বা ডাটাটাইপ পূর্বে ডিফাইন না করেও শুধুমাত্র প্রোপার্টির নাম এবং মান নির্ধারণ করতে পারেন। এই প্রকারের টাইপগুলি সাধারণত LINQ এর মধ্যে ব্যবহৃত হয়, যখন আপনি একটি কুয়েরির মাধ্যমে নির্বাচিত ডেটাকে একটি নির্দিষ্ট আউটপুট ফরম্যাটে ফেরত দিতে চান।
এগুলি মূলত read-only (পড়তে পারা) প্রোপার্টি নিয়ে গঠিত, এবং এগুলি বিশেষভাবে উপকারী যখন আপনি ডেটা ফিল্টার বা নির্বাচনের মাধ্যমে একটি নতুন অস্থায়ী অবজেক্ট তৈরি করতে চান।
Anonymous Types তৈরি করতে আপনি new কিওয়ার্ড ব্যবহার করেন এবং প্রোপার্টি নাম ও মান নির্ধারণ করেন। এখানে একটি উদাহরণ দেওয়া হল যেখানে একটি LINQ Query ব্যবহার করা হয়েছে:
var student = new
{
Name = "John",
Age = 25,
Grade = "A"
};
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}, Grade: {student.Grade}");
এখানে, student
নামক একটি অ্যানোনিমাস টাইপ তৈরি করা হয়েছে যার তিনটি প্রোপার্টি রয়েছে: Name
, Age
, এবং Grade
। আপনি এতে নতুন টাইপের নাম বা ক্লাস তৈরি করেননি, তবে new কিওয়ার্ড ব্যবহার করে ডাইনামিকভাবে এই টাইপের একটি অবজেক্ট তৈরি করেছেন।
LINQ Query ব্যবহার করার সময়, যদি আপনি কোনও কুয়েরি থেকে নির্দিষ্ট কিছু ডেটা সিলেক্ট করতে চান এবং সেই ডেটাকে একটি নতুন টাইপ হিসেবে ফেরত দিতে চান, তবে আপনি Anonymous Types ব্যবহার করতে পারেন। এখানে একটি উদাহরণ দেওয়া হল:
List<Student> students = new List<Student>
{
new Student { Name = "John", Age = 22, Grade = "A" },
new Student { Name = "Anna", Age = 24, Grade = "B" },
new Student { Name = "Mike", Age = 23, Grade = "A" }
};
var selectedStudents = from student in students
where student.Grade == "A"
select new
{
student.Name,
student.Age
};
foreach (var student in selectedStudents)
{
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}
এখানে, LINQ Query ব্যবহার করে Grade "A" থাকা ছাত্রদের Name এবং Age নির্বাচন করা হয়েছে এবং সেগুলি একটি Anonymous Type হিসেবে ফেরত দেওয়া হয়েছে। এখানে new কিওয়ার্ড দিয়ে একটি নতুন টাইপ তৈরি করা হয়েছে যা Name
এবং Age
প্রোপার্টি ধারণ করে।
Anonymous Types এবং Object Initializers মাঝে কিছু পার্থক্য রয়েছে:
Anonymous Types ব্যবহার করা খুবই সুবিধাজনক, বিশেষত LINQ কুয়েরি এবং অন্যান্য ডেটা ম্যানিপুলেশন অপারেশনে যখন আপনি অস্থায়ীভাবে ডেটাকে একটি নির্দিষ্ট ফরম্যাটে ফেরত দিতে চান। এটি কোডকে আরও সিম্পল এবং রিডেবল করে তোলে, তবে মনে রাখতে হবে যে, এগুলি read-only এবং প্রপার্টি পরিবর্তন করার সুযোগ নেই।
SelectMany এবং Projection দুটি অত্যন্ত শক্তিশালী কৌশল LINQ (Language Integrated Query)-এ যা ডেটা কুয়েরি এবং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। তাদের ব্যবহারের ধরন এবং উদ্দেশ্য আলাদা, তবে উভয়ই ডেটা রিট্রাইভ করার পদ্ধতিকে আরও কার্যকর এবং নমনীয় করে তোলে।
SelectMany হল LINQ এর একটি মেথড যা একটি ফ্ল্যাট বা একক লিস্ট বা কালেকশন তৈরি করে, যা ভেতরের কালেকশনের উপাদানগুলিকে একত্রিত করে। এটি বিশেষভাবে ব্যবহার করা হয় যখন কোনো কালেকশন বা লিস্টের মধ্যে আরেকটি কালেকশন থাকে, এবং আপনাকে সেই ভিতরের কালেকশনগুলির উপাদানগুলি একত্রিত করতে হয়।
বিশেষত্ব:
ধরা যাক, আমাদের কাছে কিছু ছাত্রের ডেটা এবং তাদের কোর্সের তালিকা রয়েছে। আমরা চাই সমস্ত ছাত্রদের কোর্সগুলো একত্রিত করতে।
var students = new List<Student>
{
new Student { Name = "John", Courses = new List<string> { "Math", "Science" }},
new Student { Name = "Jane", Courses = new List<string> { "History", "Art" }},
new Student { Name = "Bob", Courses = new List<string> { "Physics", "Chemistry" }}
};
// SelectMany ব্যবহার করে সমস্ত কোর্স একত্রিত করা
var allCourses = students.SelectMany(student => student.Courses);
foreach (var course in allCourses)
{
Console.WriteLine(course);
}
Output:
Math
Science
History
Art
Physics
Chemistry
এখানে SelectMany
মেথডটি প্রতিটি ছাত্রের কোর্সগুলিকে একত্রিত করে একটি ফ্ল্যাট লিস্ট তৈরি করেছে। এর ফলে আমরা সমস্ত কোর্সগুলোকে একত্রে দেখতে পারলাম, যেগুলি প্রথমে প্রত্যেক ছাত্রের তালিকায় ছিল।
Projection হল একটি LINQ কৌশল যা কোনো একটি ডেটা কালেকশন থেকে নির্দিষ্ট অংশ বা ফিল্ড বের করতে ব্যবহৃত হয়। এটি সাধারণত Select মেথডের মাধ্যমে সম্পাদিত হয়, যা কেবলমাত্র নির্দিষ্ট ডেটা রিটার্ন করে (যেমন নির্দিষ্ট প্রপার্টি বা ফিল্ড)। Projection-এর মাধ্যমে আপনি একটি নতুন অবজেক্ট বা মান তৈরি করতে পারেন।
বিশেষত্ব:
ধরা যাক, আমাদের কাছে কিছু ছাত্রের ডেটা রয়েছে, এবং আমরা তাদের নাম এবং তাদের প্রথম কোর্সটি বের করতে চাই।
var students = new List<Student>
{
new Student { Name = "John", Courses = new List<string> { "Math", "Science" }},
new Student { Name = "Jane", Courses = new List<string> { "History", "Art" }},
new Student { Name = "Bob", Courses = new List<string> { "Physics", "Chemistry" }}
};
// Projection ব্যবহার করে ছাত্রদের নাম এবং প্রথম কোর্স বের করা
var studentCourses = students.Select(student => new
{
Name = student.Name,
FirstCourse = student.Courses.FirstOrDefault()
});
foreach (var student in studentCourses)
{
Console.WriteLine($"{student.Name} - {student.FirstCourse}");
}
Output:
John - Math
Jane - History
Bob - Physics
এখানে Projection ব্যবহার করে, Select
মেথডটি প্রতিটি ছাত্রের নাম এবং প্রথম কোর্সটি বের করেছে এবং একটি নতুন অ্যানোনিমাস অবজেক্ট তৈরি করেছে যা Name এবং FirstCourse প্রপার্টি ধারণ করে।
কখনও কখনও SelectMany এবং Projection একসাথে ব্যবহার করা হয় যখন আপনাকে নেস্টেড কালেকশনের উপাদানগুলি একত্রিত করতে হবে এবং সেগুলিকে একটি নতুন আকারে প্রক্ষেপণ করতে হবে।
উদাহরণ:
ধরা যাক, আমাদের কাছে কিছু ছাত্র এবং তাদের কোর্স রয়েছে, এবং আমরা প্রতিটি ছাত্রের নাম এবং তাদের কোর্সের প্রথম অক্ষর বের করতে চাই।
var students = new List<Student>
{
new Student { Name = "John", Courses = new List<string> { "Math", "Science" }},
new Student { Name = "Jane", Courses = new List<string> { "History", "Art" }},
new Student { Name = "Bob", Courses = new List<string> { "Physics", "Chemistry" }}
};
// SelectMany এবং Projection একসাথে ব্যবহার করা
var studentCourseInitials = students
.SelectMany(student => student.Courses, (student, course) => new
{
student.Name,
CourseInitial = course[0]
});
foreach (var student in studentCourseInitials)
{
Console.WriteLine($"{student.Name} - {student.CourseInitial}");
}
Output:
John - M
John - S
Jane - H
Jane - A
Bob - P
Bob - C
এখানে SelectMany প্রথমে ছাত্রদের কোর্সগুলিকে একত্রিত করেছে এবং তারপর Projection এর মাধ্যমে CourseInitial
হিসেবে কোর্সের প্রথম অক্ষর বের করেছে।
এটি ডেটা রিট্রাইভাল এবং ম্যানিপুলেশনকে আরও সহজ এবং কার্যকর করে তোলে, বিশেষ করে যখন অনেক স্তরের ডেটা কাজ করতে হয়।
Complex Projection এবং Nested Queries হল LINQ কুয়েরি লেখার আরও উন্নত কৌশল, যা ডেটার বিভিন্ন দিক এবং সম্পর্কগুলি প্রক্রিয়া করতে সহায়ক। এগুলি বড় ডেটাসেটের মধ্যে প্যাটার্ন বা তথ্য বের করার জন্য শক্তিশালী টুলস হিসেবে কাজ করে। নিচে এগুলোর বিস্তারিত আলোচনা করা হলো।
Complex Projection হল LINQ কুয়েরি ব্যবহার করে ডেটার বিভিন্ন ফিল্ড বা প্রোপার্টি নির্বাচন করা, যেখানে সাধারণ Select অপারেশন ছাড়াও একাধিক প্রোপার্টি, সাব-অবজেক্ট বা কাস্টম অবজেক্ট ফিরিয়ে আনা হয়। এতে, ডেটার একটি বা একাধিক অংশকে কাস্টম অবজেক্টে রূপান্তরিত করা হয়, যা কমপ্লেক্স ডেটা রিটার্ন করে।
Complex Projection এর উদাহরণ:
ধরা যাক, আমাদের কাছে একটি Customer
ক্লাস রয়েছে যা Name, Address এবং Orders ফিল্ড ধারণ করে, যেখানে Orders একটি লিস্ট অব Order
অবজেক্ট।
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int OrderID { get; set; }
public DateTime OrderDate { get; set; }
public decimal TotalAmount { get; set; }
}
এখন, আমরা যদি Customer ক্লাসের Name এবং TotalAmount যোগ করে কাস্টম অবজেক্ট তৈরি করতে চাই, তাহলে Complex Projection ব্যবহার করব।
List<Customer> customers = new List<Customer>
{
new Customer
{
Name = "Alice",
Address = "New York",
Orders = new List<Order>
{
new Order { OrderID = 1, OrderDate = DateTime.Now, TotalAmount = 100 },
new Order { OrderID = 2, OrderDate = DateTime.Now.AddDays(-1), TotalAmount = 200 }
}
},
new Customer
{
Name = "Bob",
Address = "Los Angeles",
Orders = new List<Order>
{
new Order { OrderID = 3, OrderDate = DateTime.Now.AddDays(-2), TotalAmount = 150 }
}
}
};
// Complex Projection: Customer Name এবং Total Order Amount নির্বাচন করা
var result = from customer in customers
select new
{
customer.Name,
TotalAmount = customer.Orders.Sum(order => order.TotalAmount)
};
foreach (var item in result)
{
Console.WriteLine($"{item.Name}: {item.TotalAmount}");
}
এখানে Select
এর মাধ্যমে আমরা Name এবং Orders এর TotalAmount এর যোগফলকে কাস্টম অবজেক্ট হিসেবে ফিরিয়ে দিয়েছি। এই কুয়েরি ফলস্বরূপ:
Alice: 300
Bob: 150
এটি Complex Projection এর একটি সহজ উদাহরণ, যেখানে Order অবজেক্টের মান ব্যবহার করে একটি নতুন প্রোপার্টি তৈরি করা হয়েছে।
Nested Queries হল এমন LINQ কুয়েরি যেখানে একটি কুয়েরি অন্য একটি কুয়েরির মধ্যে থাকে। সাধারণত, এক বা একাধিক কুয়েরি সাবকুয়েরি হিসেবে ব্যবহার করা হয়, যা প্রধান কুয়েরির ফলাফল তৈরি করতে সাহায্য করে। এটি সাধারণত যখন প্রয়োজন হয় ডেটার মধ্যে সম্পর্কের ভিত্তিতে নতুন ফলাফল তৈরি করতে, তখন ব্যবহার করা হয়।
Nested Queries এর উদাহরণ:
ধরা যাক, আমাদের কাছে Order
এবং Product
ক্লাস আছে, যেখানে প্রতিটি Order এর মধ্যে একাধিক Product থাকে। আমরা যদি এমন একটি কুয়েরি তৈরি করতে চাই, যা Customer অনুযায়ী প্রতিটি Order এর জন্য সর্বোচ্চ মোট অর্ডার মূল্য বের করবে, তাহলে Nested Query ব্যবহার করতে হবে।
public class Order
{
public int OrderID { get; set; }
public string CustomerName { get; set; }
public List<Product> Products { get; set; }
}
public class Product
{
public string ProductName { get; set; }
public decimal Price { get; set; }
}
List<Order> orders = new List<Order>
{
new Order
{
OrderID = 1,
CustomerName = "Alice",
Products = new List<Product>
{
new Product { ProductName = "Laptop", Price = 1000 },
new Product { ProductName = "Mouse", Price = 50 }
}
},
new Order
{
OrderID = 2,
CustomerName = "Bob",
Products = new List<Product>
{
new Product { ProductName = "Keyboard", Price = 75 },
new Product { ProductName = "Monitor", Price = 300 }
}
},
new Order
{
OrderID = 3,
CustomerName = "Alice",
Products = new List<Product>
{
new Product { ProductName = "Phone", Price = 500 },
new Product { ProductName = "Headphones", Price = 100 }
}
}
};
// Nested Query: প্রতিটি Order এর জন্য সর্বোচ্চ মূল্য বের করা
var result = from order in orders
group order by order.CustomerName into customerGroup
select new
{
Customer = customerGroup.Key,
MaxOrderAmount = (from product in customerGroup.SelectMany(order => order.Products)
select product.Price).Max()
};
foreach (var item in result)
{
Console.WriteLine($"{item.Customer}: {item.MaxOrderAmount}");
}
এখানে Nested Query এর মধ্যে SelectMany()
এবং একটি সাব-কুয়েরি ব্যবহার করা হয়েছে, যা Products থেকে সর্বোচ্চ Price বের করে। এই কুয়েরি ফলস্বরূপ:
Alice: 1000
Bob: 300
এটি একটি Nested Query এর উদাহরণ যেখানে এক কুয়েরি অন্য কুয়েরির ভিতরে ব্যবহার করা হয়েছে, এবং ডেটার একটি অংশকে আরও নির্দিষ্টভাবে প্রক্রিয়া করা হয়েছে।
LINQ (Language Integrated Query) ব্যবহার করার সময়, আপনি ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার করে আরও কার্যকরী এবং জটিল কুয়েরি তৈরি করতে পারেন।
where
ক্লজের মাধ্যমে করা হয়।এই দুটি কৌশল একত্রে ব্যবহার করলে, আপনি একটি ডেটাসেট থেকে নির্দিষ্ট শর্ত পূরণকারী তথ্য নির্বাচন করতে পারবেন এবং সেই তথ্যের কিছু অংশ বা রূপান্তরিত সংস্করণ প্রদর্শন করতে পারবেন।
LINQ এর where
ক্লজ এবং select
ক্লজ ব্যবহার করে ফিল্টারিং এবং প্রজেকশন একত্রে করা যায়। নিচে একটি উদাহরণ দেয়া হল যেখানে একটি লিস্ট থেকে even numbers ফিল্টার করা হয়েছে এবং তারপর তাদের স্কয়ার (square) নেয়া হয়েছে।
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Filter (even numbers) এবং Projection (square) একত্রে ব্যবহার
var result = from num in numbers
where num % 2 == 0 // ফিল্টারিং: even numbers
select num * num; // প্রজেকশন: স্কয়ার
foreach (var square in result)
{
Console.WriteLine(square); // Output: 4, 16, 36, 64, 100
}
এখানে:
where num % 2 == 0
শর্তটি ফিল্টারিং করতে ব্যবহৃত হয়েছে, যার মাধ্যমে শুধুমাত্র even numbers নির্বাচন করা হয়েছে।select num * num
হল প্রজেকশন, যা নির্বাচন করা সংখ্যাগুলোর স্কয়ার বের করছে।ধরা যাক, আমাদের কাছে একটি Employee
ক্লাস আছে এবং আমরা একটি তালিকা থেকে age 30 এর বেশি এমন কর্মীদের নাম এবং বয়স বের করতে চাই।
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public string Position { get; set; }
}
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Alice", Age = 35, Position = "Manager" },
new Employee { Name = "Bob", Age = 28, Position = "Developer" },
new Employee { Name = "Charlie", Age = 42, Position = "CEO" },
new Employee { Name = "David", Age = 25, Position = "Intern" },
};
// Filter (age > 30) এবং Projection (Name এবং Age) একত্রে ব্যবহার
var result = from emp in employees
where emp.Age > 30 // ফিল্টারিং: age > 30
select new { emp.Name, emp.Age }; // প্রজেকশন: Name এবং Age
foreach (var emp in result)
{
Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}");
}
এখানে:
where emp.Age > 30
শর্তটি ফিল্টারিং করতে ব্যবহৃত হয়েছে, যার মাধ্যমে শুধুমাত্র 30 এর বেশি বয়সের কর্মী নির্বাচন করা হয়েছে।select new { emp.Name, emp.Age }
হল প্রজেকশন, যা শুধুমাত্র কর্মীর নাম এবং বয়স রিটার্ন করছে।আউটপুট:
Name: Alice, Age: 35
Name: Charlie, Age: 42
আপনি একাধিক শর্তও যোগ করতে পারেন, যেমন কর্মীর বয়স 30 এর বেশি হতে হবে এবং তার পদের নাম Manager অথবা CEO হতে হবে। এক্ষেত্রে ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার করা হবে।
var result = from emp in employees
where emp.Age > 30 && (emp.Position == "Manager" || emp.Position == "CEO") // একাধিক শর্ত
select new { emp.Name, emp.Age, emp.Position };
foreach (var emp in result)
{
Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}, Position: {emp.Position}");
}
আউটপুট:
Name: Alice, Age: 35, Position: Manager
Name: Charlie, Age: 42, Position: CEO
এখানে:
where emp.Age > 30 && (emp.Position == "Manager" || emp.Position == "CEO")
একাধিক শর্তে ফিল্টারিং করা হয়েছে।select new { emp.Name, emp.Age, emp.Position }
দ্বারা প্রজেকশন করা হয়েছে, যাতে কর্মীর নাম, বয়স এবং পদের নাম রিটার্ন করা হয়।LINQ এ ফিল্টারিং এবং প্রজেকশন একত্রে ব্যবহার করা ডেটা কুয়েরি করার একটি শক্তিশালী উপায়। ফিল্টারিং (যেমন where
ক্লজ ব্যবহার করে) আপনাকে নির্দিষ্ট শর্তে ডেটা নির্বাচন করতে সাহায্য করে, এবং প্রজেকশন (যেমন select
ক্লজ ব্যবহার করে) আপনাকে ডেটার নির্দিষ্ট অংশ বা রূপান্তরিত ডেটা প্রাপ্ত করতে সহায়তা করে। একত্রে এই দুটি কৌশল ব্যবহার করলে, আপনি খুবই কার্যকরী এবং শক্তিশালী ডেটা কুয়েরি তৈরি করতে পারবেন।
common.read_more