LINQ to DataSet হল LINQ (Language Integrated Query)-এর একটি প্রকার যা ADO.NET DataSet এর সাথে কাজ করে। এটি ডেটাবেস থেকে ডেটা রিট্রাইভ করার পর DataSet বা DataTable এর মধ্যে থাকা ডেটার উপর LINQ কুয়েরি প্রয়োগ করতে ব্যবহৃত হয়। LINQ to DataSet ডেটাবেসের পরিবর্তে ইন-মেমোরি ডেটা সোর্সের উপর কুয়েরি চালানোর জন্য খুবই কার্যকরী।
ADO.NET DataSet একটি ইন-মেমোরি ডেটাবেস বা ডেটা স্টোরেজ হিসেবে কাজ করে, যা একাধিক DataTable ধারণ করে এবং আপনি LINQ এর মাধ্যমে এই DataTable এর মধ্যে কুয়েরি করতে পারেন।
LINQ to DataSet ব্যবহার করলে ডেভেলপাররা DataSet বা DataTable এর উপর SQL কুয়েরি লেখা ছাড়াই সহজভাবে ডেটা ম্যানিপুলেশন করতে পারে, কারণ LINQ কুয়েরি লেখার পদ্ধতি SQL এর মতো কিন্তু C# কোডের মধ্যে লেখা হয়।
LINQ to DataSet ব্যবহার করতে হলে প্রথমে DataSet বা DataTable তৈরি করতে হবে এবং তারপর LINQ কুয়েরি প্রয়োগ করতে হবে। নিচে একটি উদাহরণ দেখানো হল, যেখানে LINQ to DataSet ব্যবহার করে ডেটা কুয়েরি করা হয়েছে।
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// DataTable তৈরি
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", "Category1", 20.5);
dt.Rows.Add(2, "Product2", "Category1", 30.0);
dt.Rows.Add(3, "Product3", "Category2", 15.5);
dt.Rows.Add(4, "Product4", "Category2", 25.0);
// DataSet তৈরি এবং DataTable যোগ করা
DataSet ds = new DataSet();
ds.Tables.Add(dt);
// LINQ কুয়েরি দিয়ে Price 20 এর বেশি পণ্যের নাম বের করা
var expensiveProducts = from product in ds.Tables["Products"].AsEnumerable()
where product.Field<decimal>("Price") > 20
select product.Field<string>("ProductName");
// ফলাফল প্রিন্ট করা
foreach (var product in expensiveProducts)
{
Console.WriteLine(product); // Output: Product2, Product4
}
}
}
এখানে একটি DataTable তৈরি করা হয়েছে, যেখানে পণ্যের তথ্য আছে, এবং সেই DataTable এর উপর LINQ কুয়েরি প্রয়োগ করা হয়েছে যা পণ্যের মূল্য ২০ এর বেশি এমন পণ্যগুলোর নাম বের করবে।
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", 10.5);
dt.Rows.Add(2, "Product2", 20.5);
dt.Rows.Add(3, "Product3", 30.0);
dt.Rows.Add(4, "Product4", 25.0);
// LINQ কুয়েরি দিয়ে Price 20 এর কম পণ্য নির্বাচন করা
var cheapProducts = from p in dt.AsEnumerable()
where p.Field<decimal>("Price") < 20
select new
{
ProductName = p.Field<string>("ProductName"),
Price = p.Field<decimal>("Price")
};
foreach (var product in cheapProducts)
{
Console.WriteLine($"{product.ProductName}: {product.Price}");
}
// Output: Product1: 10.5
এখানে LINQ to DataSet ব্যবহার করে Price ২০ এর কম এমন পণ্যের নাম এবং মূল্য বের করা হয়েছে।
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.Rows.Add(1, "Category1", 20.5);
dt.Rows.Add(2, "Category1", 30.0);
dt.Rows.Add(3, "Category2", 15.5);
dt.Rows.Add(4, "Category2", 25.0);
// DataTable-এ গ্রুপিং করা
var categoryGroups = from p in dt.AsEnumerable()
group p by p.Field<string>("Category") into categoryGroup
select new
{
Category = categoryGroup.Key,
AveragePrice = categoryGroup.Average(p => p.Field<decimal>("Price"))
};
foreach (var category in categoryGroups)
{
Console.WriteLine($"{category.Category}: Average Price = {category.AveragePrice}");
}
// Output: Category1: Average Price = 25.25
// Output: Category2: Average Price = 20.25
এখানে LINQ to DataSet ব্যবহার করে Category অনুযায়ী পণ্যগুলোর গড় মূল্য বের করা হয়েছে।
LINQ to DataSet ডেভেলপারদের জন্য একটি শক্তিশালী টুল যা ADO.NET DataSet বা DataTable এর উপর LINQ কুয়েরি প্রয়োগ করতে সহায়ক। এটি ডেটা ফিল্টার, গ্রুপ, অর্ডার বা প্রক্ষেপণ করতে খুবই কার্যকরী, এবং Deferred Execution সুবিধা প্রদান করে। যদিও কিছু সীমাবদ্ধতা রয়েছে, তবে এটি ইন-মেমোরি ডেটা ম্যানিপুলেশন এবং ডেটাবেসের সাথে কাজ করার সময় একটি শক্তিশালী পদ্ধতি।
common.read_more