تفاوت SingleOrDefault و FirstOrDefault در سی شارپ

تفاوت SingleOrDefault و FirstOrDefault در سی شارپ

محمد صابر جومند محمد صابر جومند یکشنبه 21 بهمن 1403

احتمالاً تا حالا برات پیش اومده که توی LINQ بخوای یه مقدار خاص رو از لیست پیدا کنی. دو تا متد خیلی معروف که برای این کار زیاد استفاده میشن، FirstOrDefault و SingleOrDefault هستن. اما تفاوتشون چیه؟ کدومشون بهتره؟ و چرا انتخاب درست بین این دو تا متد مهمه؟ تو این مقاله، قراره خیلی راحت و بدون پیچیدگی، این دو متد رو مقایسه کنیم و ببینیم که توی چه شرایطی بهتره از کدوم استفاده کنیم.

تفاوت SingleOrDefault و FirstOrDefault به در سی شارپ

 

FirstOrDefault چیست؟

FirstOrDefault اولین عنصری رو که با شرط ما جور درمیاد، برمی‌گردونه. اگه هیچ عنصری پیدا نشه، مقدار پیش‌فرض اون نوع داده رو برمی‌گردونه (مثلاً 0 برای int و null برای string).

مثال ساده:

فرض کن یه لیست از عددها داری و می‌خوای اولین عدد زوج رو پیدا کنی:

List<int> numbers = new List<int> { 1, 3, 5, 8, 10 };
int firstEven = numbers.FirstOrDefault(n => n % 2 == 0);
Console.WriteLine(firstEven); // خروجی: 8

نکات مهم:

فقط اولین مقدار مطابق رو برمی‌گردونه.

اگه چیزی پیدا نشه، مقدار پیش‌فرض رو برمی‌گردونه.

برای لیست‌های بزرگ و دیتابیس عملکرد بهتری داره.

در EF Core بهینه‌تره و اجرای سریع‌تری داره.


SingleOrDefault چیست؟

SingleOrDefault دقیقاً مثل FirstOrDefault کار می‌کنه، با این تفاوت که فقط زمانی جواب میده که یک مقدار یکتا پیدا بشه. اگه هیچ مقداری پیدا نشه، مقدار پیش‌فرض رو برمی‌گردونه، ولی اگه بیش از یک مقدار پیدا بشه، خطا میده.

مثال ساده:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
int singleNumber = numbers.SingleOrDefault(n => n == 3);
Console.WriteLine(singleNumber); // خروجی: 3

حالا اگه دو تا مقدار مطابق پیدا بشه:

List<int> numbers = new List<int> { 1, 2, 3, 3, 5 };
int singleNumber = numbers.SingleOrDefault(n => n > 2);
// Exception: System.InvalidOperationException

نکات مهم:

اگه بیشتر از یک مقدار پیدا بشه، خطا میده.

وقتی مطمئنی که فقط یه مقدار باید باشه، ازش استفاده کن.

در EF Core ممکنه باعث افت عملکرد بشه.


مقایسه FirstOrDefault و SingleOrDefault

ویژگی FirstOrDefault SingleOrDefault
مقدار بازگشتی اولین مقدار مطابق یا مقدار پیش‌فرض مقدار یکتا یا مقدار پیش‌فرض
خطا در صورت چند مقدار خیر بله (InvalidOperationException)
مناسب برای لیست‌های بزرگ؟ بله خیر (ممکنه افت عملکرد داشته باشه)
کاربرد در دیتابیس بله، سریع‌تر و بهینه‌تر خیر، ممکنه بهینه نباشه
بهترین استفاده در چه شرایطی؟ وقتی دنبال اولین مقدار هستی وقتی دقیقاً یک مقدار خاص انتظار داری

کدوم رو کی استفاده کنیم؟

اگه قراره اولین مقدار مطابق رو برداری، از FirstOrDefault استفاده کن.

اگه مطمئنی که فقط یک مقدار باید وجود داشته باشه، از SingleOrDefault استفاده کن.

اگه عملکرد و سرعت مهمه، FirstOrDefault گزینه بهتریه، مخصوصاً توی EF Core.

اگه یه مقدار خاص رو از جدول دیتابیس می‌خوای و مطمئنی که یکتاست، SingleOrDefault خوبه.


نتیجه‌گیری

انتخاب بین FirstOrDefault و SingleOrDefault بستگی به شرایطی داره که توشون استفاده میشن. اگه دنبال اولین مقدار ممکن هستی، FirstOrDefault انتخاب بهتریه چون سریع‌تره و کارایی بالاتری داره. اگه مطمئنی که فقط یک مقدار وجود داره، SingleOrDefault رو انتخاب کن چون جلوی ورود داده‌های ناخواسته رو می‌گیره.

نظرات کاربران

هیچ کامنتی هنوز ارسال نشده است.

لطفا برای ثبت نظر وارد اکانت خود شوید

محبوب ترین مقالات