LINQ (Language Integrated Query) আপনাকে ডেটা সংগ্রহের জন্য একাধিক উত্স থেকে ডেটা একত্রিত করতে Join অপারেশন ব্যবহার করার সুযোগ দেয়। যখন ডেটার মধ্যে একাধিক সম্পর্ক থাকে, তখন Multiple Joins ব্যবহার করে একাধিক টেবিল বা কালেকশনের মধ্যে সম্পর্ক স্থাপন করা হয়। এতে আরও জটিল এবং শক্তিশালী Complex Queries লেখা সম্ভব হয়।
Multiple Joins in LINQ
Multiple Joins LINQ-এ একাধিক কালেকশন বা টেবিলের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়, যেন একাধিক সোর্স থেকে তথ্য একত্রিত করা যায়। LINQ-এ একাধিক টেবিল বা কালেকশনকে Join করতে হলে, join কিওয়ার্ডটি ব্যবহার করা হয় এবং তারপরে প্রতিটি যোগ করা সোর্সের সাথে সম্পর্ক স্থাপন করা হয়।
বিশেষত্ব:
- একাধিক Join ব্যবহার করা সম্ভব।
- প্রতিটি Join সম্পর্কিত শর্ত সংজ্ঞায়িত করা হয়।
- এই কৌশলটি মূলত Inner Join, Left Join ইত্যাদির মতো SQL অপারেশনগুলোকে সমর্থন করে।
Multiple Joins এর উদাহরণ
ধরা যাক, আমাদের কাছে তিনটি কালেকশন: Students, Courses এবং Enrollments (যেখানে Enrollments কালেকশনটি ছাত্র এবং কোর্সের সম্পর্কের ডেটা ধারণ করে)। আমরা চাই ছাত্রদের নাম, কোর্সের নাম এবং তাদের নামকরণ অনুযায়ী কোর্সের নাম দেখতে।
// Sample Data
var students = new List<Student>
{
new Student { StudentID = 1, Name = "John" },
new Student { StudentID = 2, Name = "Jane" },
new Student { StudentID = 3, Name = "Bob" }
};
var courses = new List<Course>
{
new Course { CourseID = 1, CourseName = "Math" },
new Course { CourseID = 2, CourseName = "Science" },
new Course { CourseID = 3, CourseName = "History" }
};
var enrollments = new List<Enrollment>
{
new Enrollment { StudentID = 1, CourseID = 1 },
new Enrollment { StudentID = 1, CourseID = 2 },
new Enrollment { StudentID = 2, CourseID = 3 },
new Enrollment { StudentID = 3, CourseID = 2 }
};
// Multiple Join ব্যবহার করে Student, Course এবং Enrollment সম্পর্কিত ডেটা একত্রিত করা
var query = from student in students
join enrollment in enrollments on student.StudentID equals enrollment.StudentID
join course in courses on enrollment.CourseID equals course.CourseID
select new
{
student.Name,
course.CourseName
};
foreach (var item in query)
{
Console.WriteLine($"{item.Name} - {item.CourseName}");
}
Output:
John - Math
John - Science
Jane - History
Bob - Science
এখানে তিনটি কালেকশন (Students, Courses, এবং Enrollments) একত্রিত করতে Multiple Joins ব্যবহার করা হয়েছে। ছাত্রদের নাম এবং কোর্সের নাম সম্পর্কিত ডেটা পাওয়া গেছে।
Complex Queries in LINQ
Complex Queries LINQ-এ এমন কুয়েরি যা একাধিক অপারেশন যেমন Join, GroupBy, Where, OrderBy, Select, Projection এবং অন্যান্য ফাংশন একত্রে ব্যবহার করে তৈরি করা হয়। এই ধরনের কুয়েরি ব্যবহারকারীদেরকে বিভিন্ন সোর্স থেকে ডেটা সংগ্রহ এবং বিশ্লেষণ করতে সহায়ক হয়।
বিশেষত্ব:
- একাধিক অপারেশন একত্রিত করা হয়।
- ডেটা ফিল্টার, গ্রুপ, সাজানো, এবং প্রক্ষেপণ করা যায়।
- পদ্ধতি সিনট্যাক্স বা কুয়েরি সিনট্যাক্স ব্যবহার করা যেতে পারে।
Complex Query এর উদাহরণ
ধরা যাক, আমাদের একটি বিশ্ববিদ্যালয়ের ডেটা রয়েছে যেখানে ছাত্ররা কোর্সে নাম লেখায় এবং তাদের স্কোর থাকে। আমরা চাই ছাত্রদের নাম, কোর্সের নাম, এবং তাদের স্কোর জানাতে, কিন্তু শুধু সেই ছাত্রদের যাদের স্কোর ৭০ এর বেশি। এছাড়া, আমরা এই ডেটাকে কোর্সের নামে সাজাতে চাই।
// Sample Data
var students = new List<Student>
{
new Student { StudentID = 1, Name = "John" },
new Student { StudentID = 2, Name = "Jane" },
new Student { StudentID = 3, Name = "Bob" }
};
var courses = new List<Course>
{
new Course { CourseID = 1, CourseName = "Math" },
new Course { CourseID = 2, CourseName = "Science" },
new Course { CourseID = 3, CourseName = "History" }
};
var enrollments = new List<Enrollment>
{
new Enrollment { StudentID = 1, CourseID = 1, Score = 85 },
new Enrollment { StudentID = 1, CourseID = 2, Score = 90 },
new Enrollment { StudentID = 2, CourseID = 1, Score = 60 },
new Enrollment { StudentID = 2, CourseID = 3, Score = 70 },
new Enrollment { StudentID = 3, CourseID = 2, Score = 75 }
};
// Complex Query: Multiple Joins, Where, OrderBy, and Select
var query = from student in students
join enrollment in enrollments on student.StudentID equals enrollment.StudentID
join course in courses on enrollment.CourseID equals course.CourseID
where enrollment.Score > 70
orderby course.CourseName
select new
{
student.Name,
course.CourseName,
enrollment.Score
};
foreach (var item in query)
{
Console.WriteLine($"{item.Name} - {item.CourseName} - {item.Score}");
}
Output:
John - Math - 85
John - Science - 90
Bob - Science - 75
এখানে Complex Query তৈরি করতে আমরা একাধিক Join, Where, OrderBy এবং Select ব্যবহার করেছি। এই কুয়েরি ছাত্রদের নাম, কোর্সের নাম এবং তাদের স্কোর বের করেছে, তবে শুধু সেই ছাত্রদের যে স্কোর ৭০ এর বেশি।
Conclusion
- Multiple Joins LINQ-এ একাধিক সোর্স থেকে ডেটা একত্রিত করতে ব্যবহৃত হয়। এটি SQL-এর Inner Join এবং Left Join অপারেশনের মতো কাজ করে।
- Complex Queries একাধিক LINQ অপারেশন একত্রিত করে তৈরি করা হয়, যা ডেটা ফিল্টার, গ্রুপ, সাজানো এবং প্রক্ষেপণের জন্য ব্যবহৃত হয়।
- LINQ-এ Join এবং Projection একসাথে ব্যবহার করে আপনি Nested Data কে ফ্ল্যাট করে, এবং জটিল ডেটা সম্পর্ক তৈরি করতে পারেন।
LINQ এর এই শক্তিশালী বৈশিষ্ট্যগুলির সাহায্যে, আপনি ডেটাবেস বা অন্য কোন সোর্স থেকে ডেটা নিয়ে খুব সহজেই জটিল কুয়েরি তৈরি এবং এক্সিকিউট করতে পারেন।