কম্পিউটার টিউটোরিয়াল

C#-তে IEnumerable এবং IQueryable-এর পার্থক্য কী?

দ্রুত তুলনা

বিষয়IEnumerableIQueryable
নেমস্পেসSystem.CollectionsSystem.Linq
লেজি লোডিংসাপোর্ট করে নাসাপোর্ট করে
ডেটাবেস কোয়েরিসার্ভারে SELECT করে, ক্লায়েন্টে ফিল্টার করেসার্ভারে সব ফিল্টারসহ কোয়েরি রান করে
এক্সটেনশন মেথড প্যারামিটারফাংশনাল অবজেক্ট (Func<T>)এক্সপ্রেশন ট্রি (Expression<Func<T>>)
পারফরম্যান্স (DB-এ)কম ভালো (অনাবশ্য ডেটা আনে)ভালো (অপ্টিমাইজড SQL জেনারেট করে)

IEnumerable উদাহরণ

using (var dc = new DbContext()) {
    // Where ও Take দুটোই IEnumerable-এ রান হবে
    IEnumerable<SocialMedia> list = dc.SocialMedias
        .Where(p => p.Name.StartsWith("T"))
        .ToList(); // এখানে ডেটাবেসে হিট করে
    
    list = list.Take(1); // মেমরিতে ফিল্টার
}

জেনারেটেড SQL:

SELECT [t0].[ID], [t0].[Name] 
FROM [SocialMedia] AS [t0] 
WHERE [t0].[Name] LIKE @p0

লক্ষ্য করুন: TOP 1 নেই। পুরো রেজাল্ট সেট আসবে, তারপর লিনক টু অবজেক্টস Take(1) করবে।

IQueryable উদাহরণ

using (var dc = new DbContext()) {
    // IQueryable চেইন থাকলে এক্সপ্রেশন ট্রি বিল্ড হবে
    IQueryable<SocialMedia> list = dc.SocialMedias
        .Where(p => p.Name.StartsWith("T"));
    
    list = list.Take(1); // এখনও ডেটাবেসে হিট করেনি
    
    var result = list.ToList(); // এখানে এক্সিকিউট হবে
}

জেনারেটেড SQL:

SELECT TOP 1 [t0].[ID], [t0].[Name] 
FROM [SocialMedia] AS [t0] 
WHERE [t0].[Name] LIKE @p0

লক্ষ্য করুন: TOP 1 SQL-এই রয়েছে। শুধু ১ রো আयेगा।

কোনটি কখন ব্যবহার করবেন?

  • IEnumerable: ইন-মেমরি কালেকশন (List, Array), ছোট ডেটাসেট, LINQ to Objects
  • IQueryable: ডেটাবেস (Entity Framework, LINQ to SQL), বড় ডেটাসেট, রিমোট ডেটা সোর্স

মনে রাখার কথা

// IEnumerable-এ কনভার্ট করলে লেজি লোডিং গিয়ে থাকে
IEnumerable<T> enumList = queryableList.AsEnumerable();

// IQueryable-এ কনভার্ট করা যায় না (রিভার্স নয়)
  1. DirectX 11 এবং DirectX 12-এর পার্থক্য কী?

  2. C#-এ লিটারেল (Literal) এবং কনস্ট্যান্ট (Constant) এর পার্থক্য

  3. C#-এ String (ক্লাস) এবং string (এলিয়াস) এর পার্থক্য

  4. C#-এ লিস্ট এবং অ্যারেতে পার্থক্য (List vs Array)