C# LINQ-এ প্রশ্ন লেখা

C Linq E Prasna Lekha



এসকিউএল-এর মতো, ক্যোয়ারী সিনট্যাক্স ব্যবহার করে C# LINQ-এ প্রশ্ন লেখা সম্ভব। ডাটাবেস থেকে ডেটা পেতে এবং তৃতীয় পক্ষের ব্যবহারকারীদের কাছে ওয়েবে প্রদর্শন করতে এই প্রশ্নগুলি ওয়েবে C# ডাটাবেস অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়। এই নির্দেশিকায়, আমরা কিছু LINQ প্রশ্ন নিয়ে আলোচনা করব যা SQL-এর মতো। এর জন্য, আমরা একটি তালিকা ডেটা উত্স তৈরি করব এবং এতে প্রশ্নগুলি প্রয়োগ করব।

প্রশ্ন সিনট্যাক্স:

আসুন জেনেরিক সিনট্যাক্স দেখি:

থেকে পুনরাবৃত্তিকারী ভিতরে তথ্য সূত্র
নির্বাচন করুন পুনরাবৃত্তিকারী ;

এখানে:







  1. ডেটা_সোর্স এমন একটি তালিকা হতে পারে যা ডেটা ধারণ করে।
  2. ডাটা_সোর্স থেকে উপাদানগুলি আনার জন্য পুনরাবৃত্তিকারী ব্যবহার করা হয়।

তথ্য সূত্র

এই সম্পূর্ণ নির্দেশিকায়, আমরা একটি ডেটা উত্স হিসাবে রেকর্ডগুলির নিম্নলিখিত তালিকাটি ব্যবহার করব এবং সমস্ত প্রশ্নগুলি শুধুমাত্র এই ডেটা উত্সে প্রয়োগ করা হয়৷ নিশ্চিত করুন যে আপনি আপনার পরিবেশে এই কোডটি চালাচ্ছেন এবং নিম্নলিখিত উদাহরণগুলির সাথে একের পর এক ক্যোয়ারী বিবৃতি পরিবর্তন করুন যা আমরা আলোচনা করতে যাচ্ছি:



ব্যবহার পদ্ধতি ;
ব্যবহার সিস্টেম।সংগ্রহ।জেনারিক ;
ব্যবহার সিস্টেম.লিংক ;
ব্যবহার সিস্টেম.সংগ্রহ ;

পাবলিক ক্লাস গণনা
{
পাবলিক স্থির অকার্যকর প্রধান ( )
{
// তালিকা তৈরি
দেশের_দাম তালিকা করুন = নতুন তালিকা ( ) {

// তালিকায় 5টি রেকর্ড যোগ করুন
নতুন দাম ( ) { আইটেম = 'ফল' , অবস্থান = 'আমেরিকা' , পরিমাণ = 100 , খরচ = 345.78 } ,
নতুন দাম ( ) { আইটেম = 'বাদাম' , অবস্থান = 'ভারত' , পরিমাণ = 200 , খরচ = 3645.78 } ,
নতুন দাম ( ) { আইটেম = 'অন্যান্য' , অবস্থান = 'যুক্তরাজ্য' , পরিমাণ = 500 , খরচ = 90.68 } ,
নতুন দাম ( ) { আইটেম = 'তেল' , অবস্থান = 'আমেরিকা' , পরিমাণ = 100 , খরচ = 345.78 } ,
নতুন দাম ( ) { আইটেম = 'মরিচ' , অবস্থান = 'আমেরিকা' , পরিমাণ = 10 , খরচ = ৬৭.৮৯ } ,
} ;


প্রতিটির জন্য ( ছিল i ভিতরে দেশ_মূল্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;
}
}
}
পাবলিক ক্লাস দাম {
পাবলিক স্ট্রিং আইটেম { পাওয়া ; সেট ; }
পাবলিক স্ট্রিং অবস্থান { পাওয়া ; সেট ; }
পাবলিক int পরিমাণ { পাওয়া ; সেট ; }
পাবলিক দ্বিগুণ খরচ { পাওয়া ; সেট ; }
}

রেকর্ড:







ব্যাখ্যা:

1. নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে দামগুলি তৈরি করুন:

2. মূল পদ্ধতি সহ আরেকটি ক্লাস তৈরি করুন যা হল 'গণনা' এবং পাঁচটি রেকর্ড সহ দেশ_মূল্য তালিকা তৈরি করুন।



নির্বাচন করুন

মূলত, 'নির্বাচন' হল একটি প্রজেকশন অপারেটর যা নির্দিষ্ট ডেটা উত্স থেকে বৈশিষ্ট্যগুলি নির্বাচন করে। প্রশ্নটি 'থেকে' দিয়ে শুরু হয়। তারপরে, আমরা ইটারেটর নির্দিষ্ট করি যেটি ডেটা উৎসের উপর পুনরাবৃত্তি করে। তারপর, 'নির্বাচন' অপারেটর নির্দিষ্ট করা হয়।

বাক্য গঠন:

সমস্ত বৈশিষ্ট্য: ডাটা_সোর্সে ইটারেটর থেকে ইটারেটর নির্বাচন করুন;

নির্দিষ্ট বৈশিষ্ট্য: Data_Source-এ iterator থেকে iterator.attribute নির্বাচন করুন;

উদাহরণ 1:

তালিকা থেকে সমস্ত রেকর্ড নির্বাচন করতে একটি প্রশ্ন লিখুন।

ব্যবহার পদ্ধতি ;
ব্যবহার সিস্টেম।সংগ্রহ।জেনারিক ;
ব্যবহার সিস্টেম.লিংক ;
ব্যবহার সিস্টেম.সংগ্রহ ;

পাবলিক ক্লাস গণনা
{
পাবলিক স্থির অকার্যকর প্রধান ( )
{
// তালিকা তৈরি
দেশের_দাম তালিকা করুন = নতুন তালিকা ( ) {

// তালিকায় 5টি রেকর্ড যোগ করুন
নতুন দাম ( ) { আইটেম = 'ফল' , অবস্থান = 'আমেরিকা' , পরিমাণ = 100 , খরচ = 345.78 } ,
নতুন দাম ( ) { আইটেম = 'বাদাম' , অবস্থান = 'ভারত' , পরিমাণ = 200 , খরচ = 3645.78 } ,
নতুন দাম ( ) { আইটেম = 'অন্যান্য' , অবস্থান = 'যুক্তরাজ্য' , পরিমাণ = 500 , খরচ = 90.68 } ,
নতুন দাম ( ) { আইটেম = 'তেল' , অবস্থান = 'আমেরিকা' , পরিমাণ = 100 , খরচ = 345.78 } ,
নতুন দাম ( ) { আইটেম = 'মরিচ' , অবস্থান = 'আমেরিকা' , পরিমাণ = 10 , খরচ = ৬৭.৮৯ } ,
} ;

// ক্যোয়ারীতে অপারেটর নির্বাচন করুন
ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}
}
}
পাবলিক ক্লাস দাম {
পাবলিক স্ট্রিং আইটেম { পাওয়া ; সেট ; }
পাবলিক স্ট্রিং অবস্থান { পাওয়া ; সেট ; }
পাবলিক int পরিমাণ { পাওয়া ; সেট ; }
পাবলিক দ্বিগুণ খরচ { পাওয়া ; সেট ; }
}

আউটপুট:

এখানে, আমরা 'নির্বাচন' ক্যোয়ারীতে কোনো অ্যাট্রিবিউট উল্লেখ করিনি। আমরা ইটারেটর ব্যবহার করে “foreach” লুপের ভিতরে থাকা ক্যোয়ারী (ডেটা) থেকে সমস্ত বৈশিষ্ট্য নিয়ে এসেছি।

উদাহরণ 2:

এখন, 'সিলেক্ট' অপারেটরের মধ্যে আইটেম অ্যাট্রিবিউট উল্লেখ করে আইটেমগুলি পান। প্রশ্নটি হল  ' i থেকে country_prices থেকে i.item নির্বাচন করুন

// ক্যোয়ারীতে আইটেম অ্যাট্রিবিউট পেতে অপারেটর নির্বাচন করুন
ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
নির্বাচন করুন i . আইটেম ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i ) ;

}

আউটপুট:

লাইন # 21 - লাইন # 29:

2. কোথায়

আপনি যদি কিছু শর্ত/গুলির উপর ভিত্তি করে ডেটা ফিল্টার করতে চান, আপনি 'কোথায়' অপারেটরটি 'নির্বাচন' ধারা সহ ক্যোয়ারীতে ব্যবহার করতে পারেন। তবে 'কোথায়' অপারেটরটি প্রথমে ব্যবহার করা হয় এবং তারপরে নির্বাচিত অপারেটরটি নির্দিষ্ট করা হয়।

বাক্য গঠন:

আসুন দেখুন কিভাবে LINQ ক্যোয়ারীতে 'কোথায়' অপারেটর ব্যবহার করবেন।

থেকে পুনরাবৃত্তিকারী ভিতরে তথ্য সূত্র
কোথায় অবস্থা / s
নির্বাচন করুন পুনরাবৃত্তিকারী . বৈশিষ্ট্য ;

উদাহরণ 1: একক শর্ত

আসুন আইটেম বৈশিষ্ট্যের উপর ভিত্তি করে রেকর্ডগুলি ফিল্টার করি। শর্ত হিসাবে “যেখানে” অপারেটরে সমান (==) অপারেটর ব্যবহার করুন এবং পুনরাবৃত্তিকারীকে “চিলিস” এর সাথে তুলনা করুন। সুতরাং, 'মরিচ' সম্পর্কিত রেকর্ডগুলি নির্বাচন করা হয়েছে।

প্রশ্নটি হল ' আমি দেশ_দাম থেকে
যেখানে i.item == 'মরিচ'
আমি নির্বাচন করুন'

// কোথায় রেকর্ড ফিল্টার করতে হবে তা নির্বাচন করুন
ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
কোথায় i . আইটেম == 'মরিচ'
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

আউটপুট:

'মরিচ' আইটেমের সাথে শুধুমাত্র একটি রেকর্ড আছে।

লাইন # 21 - লাইন # 30:

উদাহরণ 2: একাধিক শর্ত

আসুন অবস্থান এবং পরিমাণের বৈশিষ্ট্যের উপর ভিত্তি করে রেকর্ডগুলি ফিল্টার করি। পরিমাণ 50-এর বেশি এবং 300-এর কম হওয়া উচিত৷ অবস্থানটি 'USA' হওয়া উচিত৷

প্রশ্নটি হল ' আমি দেশ_দাম থেকে
যেখানে i. পরিমাণ > 50
যেখানে i. পরিমাণ <300
যেখানে i.location == “USA”
আমি নির্বাচন করুন'

// একাধিক শর্ত উল্লেখ করে রেকর্ড ফিল্টার করার সাথে নির্বাচন করুন
ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
কোথায় i . পরিমাণ > পঞ্চাশ
কোথায় i . পরিমাণ < 300
কোথায় i . অবস্থান == 'আমেরিকা'
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

আউটপুট:

আগের কন্ডিশনের সঙ্গে মিলেছে দুটি রেকর্ড।

লাইন # 21 - লাইন # 32:

উদাহরণ 3: এবং (&&) অপারেটর

আমরা একবারে একাধিক শর্ত নির্দিষ্ট করতে 'এবং (&&)' অপারেটর নির্দিষ্ট করতে পারি। সমস্ত শর্ত সত্য হলে, সমস্ত শর্ত পূরণকারী রেকর্ডগুলি ক্যোয়ারী দ্বারা ফেরত দেওয়া হয়।

এই উদাহরণে, আমরা রেকর্ডগুলি নির্বাচন করি যদি পরিমাণটি 20 এর বেশি হয় এবং খরচ 67.89 হয়।

প্রশ্নটি হল ' আমি দেশ_দাম থেকে
যেখানে i.quantity <20 && i.cost == 67.89
আমি নির্বাচন করুন'

ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
কোথায় i . পরিমাণ < বিশ && i . খরচ == ৬৭.৮৯
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

আউটপুট:

20 এর কম এবং 67.89 খরচের পরিমাণ সহ শুধুমাত্র একটি রেকর্ড রয়েছে

লাইন # 21 - লাইন # 29:

উদাহরণ 4: অথবা (||) অপারেটর

'বা (||)' অপারেটরটি একই সময়ে একাধিক শর্ত নির্দিষ্ট করতেও ব্যবহৃত হয়। অন্তত একটি শর্ত সত্য হলে, সেই শর্ত পূরণকারী রেকর্ডগুলি ফেরত দেওয়া হয়।

এই উদাহরণে, আমরা রেকর্ডগুলি নির্বাচন করি যদি পরিমাণটি 300-এর বেশি হয় বা অবস্থানটি 'টোকিও' হয়।

প্রশ্নটি হল ' আমি দেশ_দাম থেকে
যেখানে i. পরিমাণ > 300 || i.location == 'টোকিও'
আমি নির্বাচন করুন'

ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
কোথায় i . পরিমাণ > 300 || i . অবস্থান == 'টোকিও'
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

আউটপুট:

300 এর বেশি পরিমাণের সাথে শুধুমাত্র একটি রেকর্ড রয়েছে (প্রথম শর্তটি মিলেছে)।

লাইন # 21 - লাইন # 29:

3. দ্বারা অর্ডার

আপনি যদি LINQ ক্যোয়ারী দ্বারা প্রত্যাবর্তিত রেকর্ডগুলিকে যেকোন বৈশিষ্ট্যের মানগুলির উপর ভিত্তি করে ঊর্ধ্বমুখী বা অবরোহ ক্রমে সাজাতে চান, আপনি ক্যোয়ারীতে 'অর্ডার বাই' অপারেটর ব্যবহার করতে পারেন। 'নির্বাচন' অপারেটরের আগে আপনাকে এই অপারেটরটি নির্দিষ্ট করতে হবে।

বাক্য গঠন:

আসুন দেখুন কিভাবে LINQ ক্যোয়ারীতে 'অর্ডার বাই' অপারেটর ব্যবহার করবেন।

উর্দ্ধক্রমানুসারে:

থেকে পুনরাবৃত্তিকারী ভিতরে তথ্য সূত্র
আদেশ দ্বারা পুনরাবৃত্তিকারী . বৈশিষ্ট্য আরোহী
নির্বাচন করুন পুনরাবৃত্তিকারী ;

অবরোহী ক্রম:

থেকে পুনরাবৃত্তিকারী ভিতরে তথ্য সূত্র
আদেশ দ্বারা পুনরাবৃত্তিকারী . বৈশিষ্ট্য অবরোহী
নির্বাচন করুন পুনরাবৃত্তিকারী ;

উদাহরণ 1: উর্দ্ধক্রমানুসারে

ডেটা উত্স (তালিকা) থেকে সমস্ত বৈশিষ্ট্য নির্বাচন করুন এবং পরিমাণ বৈশিষ্ট্যের মানগুলির উপর ভিত্তি করে ক্রমবর্ধমান ক্রমে তাদের ফেরত দিন।

প্রশ্নটি হল ' আমি দেশ_দাম থেকে
অর্ডার দ্বারা i. পরিমাণ আরোহী
আমি নির্বাচন করুন'

ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
আমি দ্বারা আদেশ . পরিমাণ আরোহী
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

আউটপুট:

লাইন # 21 - লাইন # 29:

উদাহরণ 2: ডিসেন্ডিং অর্ডার

ডেটা সোর্স (তালিকা) থেকে সমস্ত বৈশিষ্ট্য নির্বাচন করুন এবং খরচ বৈশিষ্ট্যের মানগুলির উপর ভিত্তি করে নিচের ক্রমে তাদের ফেরত দিন।

প্রশ্নটি হল ' আমি দেশ_দাম থেকে
অর্ডার দ্বারা i.cost descending
আমি নির্বাচন করুন'

ছিল তথ্য = থেকে i ভিতরে দেশ_মূল্য
আমি দ্বারা আদেশ . খরচ অবরোহী
নির্বাচন করুন i ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

আউটপুট:

লাইন # 21 - লাইন # 29:

4. সীমা

এসকিউএল-এ সীমা ক্যোয়ারী দ্বারা প্রত্যাবর্তিত রেকর্ডগুলিকে সীমাবদ্ধ করে। এটি কোয়েরি দ্বারা প্রত্যাবর্তিত শীর্ষ রেকর্ড প্রদান করে। LINQ-এ, আমরা Take() অপারেটরের সাথে Skip() ব্যবহার করে এটি অর্জন করতে পারি। Take() রেকর্ডের নির্দিষ্ট সংখ্যা পায়। শুরুর রেকর্ড নম্বর নির্দিষ্ট করতে Skip() ব্যবহার করা হয়। এইভাবে, আমরা LINQ-এ 'সীমা' কার্যকারিতা অর্জন করতে পারি।

বাক্য গঠন:

( থেকে পুনরাবৃত্তিকারী ভিতরে তথ্য সূত্র
নির্বাচন করুন পুনরাবৃত্তিকারী ) . এড়িয়ে যান ( n ) . গ্রহণ করা ( n ) ;
  1. Skip() রেকর্ডগুলি এড়িয়ে যেতে এবং অবশিষ্ট রেকর্ডগুলি ফেরত দিতে ব্যবহৃত হয়। এটি একটি পূর্ণসংখ্যা লাগে যা এড়িয়ে যাওয়ার উপাদানগুলির সংখ্যা নির্দিষ্ট করে। আমাদের ক্ষেত্রে, এটি 0।
  2. Take() প্রথম রেকর্ড থেকে রেকর্ডের 'n' নম্বর নিতে ব্যবহৃত হয়।

উদাহরণ:

পাঁচটি রেকর্ডের মধ্যে প্রথম তিনটি রেকর্ড নির্বাচন করুন যা কোয়েরি দ্বারা ফেরত দেওয়া হয়।

প্রশ্নটি হল ' (দেশের_মূল্যে আমি থেকে
i নির্বাচন করুন। স্কিপ(0) নিন।(3)”

ছিল তথ্য = ( থেকে i ভিতরে দেশ_মূল্য
নির্বাচন করুন i ) . এড়িয়ে যান ( 0 ) . গ্রহণ করা ( 3 ) ;

প্রতিটির জন্য ( ছিল i ভিতরে তথ্য )
{
কনসোল . লেখার লাইন ( i . আইটেম + '' + i . অবস্থান + '' + i . পরিমাণ + '' + i . খরচ ) ;

}

}

আউটপুট:

লাইন # 21 - লাইন # 28:

উপসংহার

আমরা শিখেছি কিভাবে C# LINQ-এ প্রশ্ন লিখতে হয় যা SQL এর মতো। এই টিউটোরিয়ালের অংশ হিসাবে, আমরা আলোচনা করেছি কিভাবে ডেটা উৎস থেকে রেকর্ড নির্বাচন করতে 'নির্বাচন' অপারেটর ব্যবহার করতে হয়। ক্যোয়ারী দ্বারা প্রত্যাবর্তিত রেকর্ডগুলি ফিল্টার করতে, আমরা শর্তগুলি নির্দিষ্ট করে 'কোথায়' অপারেটর ব্যবহার করেছি। তারপর, আমরা শিখেছি কিভাবে “অর্ডার বাই” অপারেটর দিয়ে কোয়েরি দ্বারা ফেরত দেওয়া রেকর্ডগুলিকে সাজাতে হয়। অবশেষে, রেকর্ড সীমিত করতে, আমরা Skip() এবং Take() অপারেটর ব্যবহার করেছি।