ফলাফল খালি থাকলে লিনকিউ কী ফিরে আসে return


319

আমার লিনকিউ কোয়েরি সম্পর্কে একটি প্রশ্ন আছে। সাধারণত একটি ক্যোয়ারী একটি IEnumerable<T>প্রকার ফেরত দেয় । রিটার্নটি খালি থাকলে, এটি নাল কিনা তা নিশ্চিত হন না। আমি নিশ্চিত না যে ToList()নীচেরগুলি কোনও ব্যতিক্রম বা কেবল একটি ফাঁকা ফেলে দেবে List<string>যদি IEnumerableফলস্বরূপ কিছুই না পাওয়া যায় ?

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

আমি জানি এটি একটি খুব সাধারণ প্রশ্ন, তবে আমার কাছে আপাতত ভিএস উপলব্ধ নেই।


11
আমি অনুমান করি ফলাফলটি এনিউমারেবল? এমপিটি?
ডেভিড.চু.সি.এ

উত্তর:


512

এটি একটি খালি গণনার ফিরিয়ে দেবে। এটা নালার হবে না। আপনি শব্দ ঘুমাতে পারেন :)


38

আপনি .Any()পদ্ধতিটিও পরীক্ষা করতে পারেন :

if (!YourResult.Any())

কেবলমাত্র একটি নোট যা .Anyএখনও ডাটাবেস থেকে রেকর্ডগুলি পুনরুদ্ধার করবে; একটি .FirstOrDefault()/.Where()করা ঠিক ততটাই ওভারহেড হবে তবে আপনি কোয়েরি থেকে ফিরে আসা বস্তু (গুলি) ধরতে সক্ষম হবেন


5
প্রশ্নটি কোথায় একটি ডাটাবেস উল্লেখ করে?
সিজেজা

4
যিনি সম্পাদনা করেছেন তাকে আপনাকে জিজ্ঞাসা করতে হবে, আমি কোনও
ডিবিয়ের

পয়েন্ট এডিটর তৈরি করছে শব্দ, যদিও, ডিবি না হয়। আমি বিশ্বাস করি যে তারা যা বলছেন .Any()তা কেবল আপনাকে বলতে যাচ্ছেন যে আপনার কাছে কোনও মিলের রেকর্ড আছে কিনা, যেখানে কোনও নির্দিষ্ট মান সন্ধানের জন্য একটি আসল জিজ্ঞাসা করা যখন বাতিল নাও হতে পারে .Any()
vapcguy

1
সম্পাদনাটি আসলে ভুল হতে পারে। সত্ত্বে যদি লিনক ব্যবহার করা হয়, ডিবি এটি শর্টকাট করতে পারে এবং সত্য বা মিথ্যা ব্যতীত কোনও
তথ্যই

19
var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(ডাম্প লিনকপ্যাড থেকে এসেছে )


একদম ঠিক! আপনি অনুসন্ধানের আরও ভাল ইঙ্গিত পাবেন
8'16

টিআইএল Count()হ'ল একটি পদ্ধতি, কেবল সম্পত্তি নয়
হায়নিউ

2
আপনার ব্যবহার করা উচিত নয়? যে কোনও () কারণ গণনা সমস্ত আইটেমের মাধ্যমে গণনা করবে?
শেইপটাইগজিআরএনপি


8

লিনক-টু-এসকিউএল এ আপনি যদি কোনও ফলাফল ছাড়াই কোনও ক্যোয়ারিতে প্রথম উপাদানটি পেতে চেষ্টা করেন তবে আপনি sequence contains no elementsত্রুটি পাবেন। আমি আপনাকে আশ্বস্ত করতে পারি যে উল্লিখিত ত্রুটিটি সমান নয় object reference not set to an instance of an object। উপসংহারে না, এটি বাতিল হবে না যেহেতু নাল sequence contains no elementsএটি সর্বদা বলবে তা বলতে পারে না object reference not set to an instance of an object;)


1
ওহ, আপনার ব্যাখ্যা আরও বুঝতে সাহায্য করে। ধন্যবাদ !
কে লি

এটি কি প্রশ্নের উত্তর দেয়?
চিফ টুপেনসিলস

7

এখানে অন্যান্য পোস্টগুলি এটি পরিষ্কার করে দিয়েছে যে ফলাফলটি একটি "খালি" আইকোয়ারিযোগ্য, যা টোলিস্ট () সঠিকভাবে একটি খালি তালিকায় পরিণত হবে ইত্যাদি etc.

কিছু অপারেটর সম্পর্কে সতর্কতা অবলম্বন করবেন না, কারণ আপনি যদি তাদের একটি খালি গণনাযোগ্য প্রেরণ করেন তবে তারা ফেলে দেবে। আপনি যখন তাদের এক সাথে শৃঙ্খলাবদ্ধ তখন এটি ঘটতে পারে।


3
"কিছু অপারেটর সম্পর্কে সতর্ক থাকুন, আপনি যদি তাদের খালি শনাক্ত করে পাঠান তবে তারা ফেলে দেবে। আপনি যখন তাদের একসাথে শৃঙ্খলাবদ্ধ করেন তখন এটি ঘটতে পারে।" - এই আমাকে পেয়েছে। আমার নাল ফেরত মান ছিল যা আমি তার পরে অন্য একটি ক্যোয়ারিতে ফিড করেছি। এটি দ্বিতীয় ক্যোয়ারির ফলে আমি যা ফেলেছি তা ছুঁড়ে ফেলেছে কারণ দ্বিতীয় কোয়েরিতে কোনও মান দেওয়া হয়নি।
ট্রেভের্ক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.