কর্মের কোন উপাদান নেই?


131

আমি বর্তমানে একটি ডাটাবেস থেকে সারি পেতে দুটি জায়গায় একটি একক ক্যোয়ারী ব্যবহার করছি।

BlogPost post = (from p in dc.BlogPosts
                 where p.BlogPostID == ID
                 select p).Single();

পাঠ্য বাক্সগুলিতে ডেটা রাখার জন্য সারিটি পুনরুদ্ধার করার সময় ক্যোয়ারীটি ঠিক আছে, তবে এটি সম্পাদনা করতে এবং এটি পুনরায় ডাটাবেসে রাখার জন্য সারিটি পুনরুদ্ধার করার জন্য ব্যবহৃত হয় "সিকোয়েন্সে কোনও উপাদান থাকে না"। আমি বুঝতে পারি না কেন এটি এক নজরে উপযুক্ত সারিটি খুঁজে পেতে পারে তবে অন্যটি নয়।

(এএসপি.নেট এমভিসি এবং লিনকিউ ব্যবহার করে)


18
আপনাকে সিঙ্গলঅরডিফল্ট ব্যবহার করতে হবে, কোনও জিনিস না ফেরলে তা বাতিল হয়ে যাবে
মাহমুদ ফারাহাত

ত্রুটিটি বলছে যে এটি ডিসি.ব্লগপোস্টগুলিতে আইডির মানের সাথে মেলে এমন কোনও আইটেম খুঁজে পাবে না। হয় আইডির কোনও মূল্য নেই বা আপনার তালিকার আইটেমগুলিতে সেই আইটেমটি রয়েছে। সিঙ্গলঅরডিফল্ট বা ফার্স্টআরডিফল্ট ব্যবহার করুন, ত্রুটির পরিবর্তে কোনও আইটেম পাওয়া না গেলে এগুলি একটি নাল বস্তুটি ফিরিয়ে দেবে।
prd82

উত্তর:


32

উভয় ক্ষেত্রেই এই লাইনের উপর একটি ব্রেকপয়েন্ট বা একটি ডিবাগ.প্রিন্ট রাখুন এবং দেখুন আইডিতে কী রয়েছে।


2
এটি কি খুঁজে পেয়েছিল যে কোনও কারণে আইডি এবং তারিখটি সম্পাদনা পৃষ্ঠা থেকে নূতন \ নতুন (0000-0000) হিসাবে পাস হচ্ছে। পৃষ্ঠাটি ব্লগপোস্ট হিসাবে দৃ strongly়ভাবে টাইপ করা হয়েছে। সম্পাদনা পৃষ্ঠায়, আমার কাছে কেবল শিরোনাম এবং সামগ্রীর জন্য পাঠ্য বাক্স রয়েছে, আইডি এবং তারিখটি পৃষ্ঠায় মোটেও দেওয়া হয় না। এটি কি এটিকে শূন্য-নতুন হিসাবে পাস করার কারণ হতে পারে?

2
আপনি আইডিটি কোথা থেকে আসবেন বলে আশা করছিলেন?
রায়ান লুন্ডি

8
পূর্বের দৃষ্টিতে, আমি সত্যই নিশ্চিত নই> _ <মূর্খ সমস্যাটি সত্যই।

367

" ফিক্সিং লিনকিউ ত্রুটি থেকে: সিকোয়েন্সে কোনও উপাদান নেই ":

আপনি যখন LINQ ভুল পান, "সিকোয়েন্স কোন উপাদানগুলি রয়েছে" এই সাধারণত কারণ আপনি ব্যবহার করছেন First()বা Single()বদলে কমান্ড FirstOrDefault()এবং SingleOrDefault()

এটি নিম্নলিখিত কমান্ডগুলির কারণেও হতে পারে:

  • FirstAsync()
  • SingleAsync()
  • Last()
  • LastAsync()
  • Max()
  • Min()
  • Average()
  • Aggregate()

3
এটি আমার সমস্যা সমাধান করেছে। লিঙ্কের জন্য ধন্যবাদ!
কাউন্টমারফি

5
পারফেক্ট! ctx.Rosters.First(c => c.RosterAccess == accCode);<- ভাঙা ctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);<- কাজ
রবি রাম

2
আমার ক্ষেত্রে আমি Maxএকটি খালি অনুক্রমের
কাজটি করছিলাম

1
সুতরাং এখন আমরা জানি যে প্রতিটি আপের ভোটের ওজন (এই মুহুর্তে) 31.25 পাউন্ড।
বি ক্লে শ্যানন

2
আপনি কি নিশ্চিত যে LastOrDefault()এটি ত্রুটিটিও ট্রিগার করতে পারে? কেন? আমি ভেবেছিলাম "অরডিফল্ট" সমস্ত বিষয়
রোবস্টে

22

ব্যবহার করুন

.FirstOrDefault()

কারণ যদি ফলাফলের প্রথম সারিতে কোনও তথ্য না থাকে তবে এই নির্দেশটি ডিফল্ট তথ্যে যায়।


2
অ্যাসিঙ্ক কল ব্যবহারের ক্ষেত্রে .ফার্সআরডিফল্টসাইঙ্ক ();
Andrea Girardi

12

আচ্ছা, IDএখানে কি ? বিশেষত, এটি একটি স্থানীয় পরিবর্তনশীল? কিছু স্কোপ / ক্যাপচার সংক্রান্ত সমস্যা রয়েছে যার অর্থ এটি কেবলমাত্র ক্যোয়ারির জন্য দ্বিতীয় পরিবর্তনশীল অনুলিপি ব্যবহার করা বাঞ্ছনীয়:

var id = ID;
BlogPost post = (from p in dc.BlogPosts
                 where p.BlogPostID == id
                 select p).Single();

এছাড়াও; এটি যদি লিনিক-টু-এসকিউএল হয় তবে বর্তমান সংস্করণে আপনি যদি ফর্মটি ব্যবহার করেন তবে কিছুটা ভাল আচরণ পাবেন:

var id = ID;
BlogPost post = dc.BlogPosts.Single(p => p.BlogPostID == id);

আইডি হ'ল একটি জিইউইডি একটি আর্গুমেন্ট হিসাবে পাস হয়


8

যা কিছু বলা হয়েছে তা ছাড়াও, আপনি কল DefaultIfEmpty()করার আগে কল করতে পারেন Single()। এটি নিশ্চিত করবে যে আপনার সিকোয়েন্সে কিছু রয়েছে এবং এর ফলে অবৈধ অপসারণের ধারণাটি "সিকোয়েন্সে কোনও উপাদান নেই" এড়িয়ে যায়। উদাহরণ স্বরূপ:

BlogPost post = (from p in dc.BlogPosts
                 where p.BlogPostID == ID
                 select p).DefaultIfEmpty().Single();

2

আমার একটি কার্যক্রমে একই অবস্থা ছিল যা গড় গণনা করে।

উদাহরণ:

ws.Cells[lastRow, startingmonths].Value = lstMediaValues.Average();

মামলা সমাধান:

ws.Cells[lastRow, startingmonths].Value = lstMediaValues.Count == 0 ? 0 : lstMediaValues.Average();

1

ত্রুটির কারণ:

  1. ক্যোয়ারী from p in dc.BlogPosts where p.BlogPostID == ID select pএকটি সিকোয়েন্স দেয়।

  2. Single() পদক্ষেপ 1 এ ফিরে আসা ক্রম থেকে একটি উপাদান পুনরুদ্ধার করার চেষ্টা করে।

  3. ব্যতিক্রম অনুসারে - ধাপ 1 এ ফিরে আসা ক্রমটিতে কোনও উপাদান নেই।

  4. একক () পদক্ষেপ 1 এ ফিরে আসা ক্রম থেকে কোনও উপাদান পুনরুদ্ধার করার চেষ্টা করে যার কোনও উপাদান নেই।

  5. যেহেতু Single()ধাপ 1-এ ফিরে আসা ক্রমটি থেকে কোনও একটি উপাদান আনতে সক্ষম নয়, এটি একটি ত্রুটি ছুঁড়ে ফেলে।

ফিক্স:

জিজ্ঞাসা নিশ্চিত করুন (from p in dc.BlogPosts where p.BlogPostID == ID select p)

কমপক্ষে একটি উপাদান সহ একটি ক্রম প্রদান করে।

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