লিনিকিউ হল প্রযুক্তির একটি বিস্তৃত সেট, এর চারপাশে ভিত্তিক (উদাহরণস্বরূপ) একটি ক্যোরি বোঝার বাক্য গঠন, উদাহরণস্বরূপ:
var qry = from x in source.Foo
where x.SomeProp == "abc"
select x.Bar;
যা সংকলক দ্বারা কোডে ম্যাপ করা হয়েছে:
var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);
এবং এখানে আসল যাদু শুরু হয়। নোট করুন যে আমরা Foo
এখানে যা বলিনি - এবং সংকলক যত্ন করে না! যতক্ষণ না এটি ল্যাম্বডা নিতে পারে এমন কিছু উপযুক্ত পদ্ধতির সমাধান Where
করতে পারে, এবং এর ফলস্বরূপ এমন কিছু Select
পদ্ধতি রয়েছে যা ল্যাম্বদা গ্রহণ করতে পারে, এটি খুশি।
এখন যে বিবেচনা ল্যামডা কম্পাইল করা যায় পারেন একটি বেনামী পদ্ধতি মধ্যে (প্রতিনিধি, LINQ টু অবজেক্টস, যা LINQ টু ডেটা সেটটি অন্তর্ভুক্ত জন্য) বা যে একটি বস্তু মডেল ল্যামডা প্রতিনিধিত্ব করে একটি অভিব্যক্তি-ট্রি (ক রানটাইম মডেল )।
ইন-মেমরি ডেটার জন্য (সাধারণত IEnumerable<T>
), এটি কেবল প্রতিনিধিকে কার্যকর করে - সূক্ষ্ম এবং দ্রুত। তবে IQueryable<T>
অভিব্যক্তির অবজেক্ট-উপস্থাপনের জন্য (ক LambdaExpression<...>
) এটি এটিকে আলাদা করে তুলতে পারে এবং এটি কোনও "লিনিক-টু-সামथিং" উদাহরণে প্রয়োগ করতে পারে।
ডাটাবেসগুলির জন্য (লিনকু-টু-এসকিউএল, লিংক-টু-সত্তা) এর অর্থ টিএসকিউএল লেখার অর্থ হতে পারে, উদাহরণস্বরূপ:
SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1
তবে এটি (উদাহরণস্বরূপ ADO.NET ডেটা পরিষেবাদির জন্য) একটি HTTP কোয়েরি লিখতে পারে।
কোনও লিখিত TSQL ক্যোয়ারী কার্যকর করা যা একটি সামান্য পরিমাণে ডেটা দেয় যা নেটওয়ার্কের উপর একটি সম্পূর্ণ ডাটাবেস লোড করা এবং তারপরে ক্লায়েন্টে ফিল্টারিংয়ের চেয়ে দ্রুত। যদিও উভয়েরই আদর্শ পরিস্থিতি এবং সরল-ভুল পরিস্থিতিতে রয়েছে।
এখানে লক্ষ্য এবং উপকারিতাটি হ'ল আপনাকে বিস্তৃত ডেটা-উত্সগুলি জিজ্ঞাসা করার জন্য একক, স্থির-চেক সিনট্যাক্স ব্যবহার করার অনুমতি দেয় এবং কোডটিকে গ্রুপের ডেটাতে আরও "এক্সপ্রেশনাল" কোড হিসাবে চিহ্নিত করা যায়, উদাহরণস্বরূপ নয় এটি কী করার চেষ্টা করছে তার দিক দিয়ে খুব স্পষ্ট - কোডের আকারে এটি হারিয়ে যায়)।