دریافت مقدار ثابت در کویری Linq
سلام دوستان
یک کویری دارم که توسط Linq نوشته شده. در نوشتن خود کویری مشکلی نیست. ولی میخوام این کویری فقط یک عدد int در نهایت برگردونه . کویری من در Linq به صورت زیر هست
var age = (from u in _context.product where u.supplierid == supplierid select u.number).Single();
انتظار دارم بعد از اجرا کویری بالا سن کاربر در متغیر age ذخیره شده باشه تا بتونم از این متغیر استفاده کنم. اما متاسفانه خطا میده و عددی در این متغیر وجود نداره.
سوال اینه که نحوه دریافت مقدار ثابت در یک کویری Linq به چه صورتی هست؟
خطای دریافت شده
Sequence contains more than one element
پاسخ هوش مصنوعی
خطای دریافتی شما به این خاطر است که از متد Single()
استفاده کرده اید که فقط در صورتی کار می کند که دقیقاً یک عنصر در نتیجه وجود داشته باشد. اگر کویری شما چندین عنصر برگرداند، این خطا رخ می دهد.
برای برخورد با این مشکل، می توانید از متد SingleOrDefault()
به جای Single()
استفاده کنید. این متد در صورت وجود چندین عنصر، مقدار پیش فرض (به عنوان مثال 0
برای int
) را برمی گرداند.
کد اصلاح شده شما به شکل زیر خواهد بود:
var age = (from u in _context.product
where u.supplierid == supplierid
select u.number).SingleOrDefault();
با این تغییر، اگر هیچ نتیجه یا نتایج چندگانه ای وجود داشته باشد، خطای شما رفع خواهد شد و مقدار age
به درستی تنظیم می شود.
همچنین، اگر می خواهید فقط اولین نتیجه را بگیرید، می توانید از FirstOrDefault()
نیز استفاده کنید که مشابه عملکرد SingleOrDefault()
است، اما اگر چندین نتیجه وجود داشته باشد، تنها اولین نتیجه را برمی گرداند:
var age = (from u in _context.product
where u.supplierid == supplierid
select u.number).FirstOrDefault();
این روش نیز می تواند به شما در جلوگیری از بروز خطا کمک کند.
سلام. دوست عزیز کدتون رو به شکل زیر اصلاح کنید درست میشه.
var age = (from u in _context.users where u.userid == userid select new {u.age}).Single();
خب دوست عزیز مقدار فیلتر شده شما در کوئری بیش از یک مورد هست در صورتی که شما در اخر کوئری از Single استفاده کردید!
مقدار userid رو چک کنید ببینید درست هست یا خیر؟ در صورتی که درست باشه، کاربری با این آی دی بیش یک مورد در دیتابیس وجود داره!
var age = (from u in _context.product where u.supplierid == supplierid select u.number).Max();
کد بالا بزرگترین عدد ثبت شده رو بر میگردونه. و اگر به جای Max کلمه Last رو قرار بدید آخرین عدد رو برمیگردونه
تست بفرمایید و اگر مشکل برطرف نشد اعلام بفرمایید.
سلام
نکته اول دقت کنید که شما یک متغیر از نوع var تعریف کردید و پاسخ کوئری رو داخل این متغیر قرار دادید. بنابراین انتظار نداشته باشید بتونید مثل یک List باهاش برخورد کنید.
کوئری شما میتونه به کوئری زیر تغییر کنه
var age = (from u in _context.product where u.supplierid == supplierid select u)
.ToList().OrderByDescending(o => o.supplierid).Take(1).Select(s => new { supid = s.supplierid });
int lastnum = age.First().supid;
در کوئری بالا چند نکته وجود داره
- اول اینکه ممکنه خروجی شما چندین عدد داشته باشه و شما توی توضیحات پاسخهاتون گفتید آخرین عدد رو لازم دارید. بنابراین با استفاده از دستور orderbydescending خروجی رو از آخر به اول مرتب می کنیم.
- در ادام از دستور Take(1) استفاده کردیم. یعنی آخرین سطر رو که آخرین عدد هم در این سطر هست رو گرفتیم.
- و در نهایت با استفاده از دستور Select فقط ستون مورد نظر که supplierid هست رو انتخاب کردیم و یک اسم به نام supid بهش دادیم.
خب تا اینجا مقدار آخرین عدد رو داریم اما اگر الان نمیتونید مثل یک متغیر int از این عدد استفاده کنید بنابراین در ادامه در متغیر lastnum آخرین اولین عدد موجود در متغیر var رو دریافت کردیم.
در حال حاضر متغیر lastnum یک متغیر معمولی int با مقدار آخرین عدد شما هست
موفق باشید
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- مشکل تاریخ شمسی در سی شارپ
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- نمایش گزارش stimulsoft روی کلاینت
- آپلود فایل در Asp.net core چگونه است؟