
تفاوت SingleOrDefault و FirstOrDefault در سی شارپ
احتمالاً تا حالا برات پیش اومده که توی 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
رو انتخاب کن چون جلوی ورود دادههای ناخواسته رو میگیره.
نظرات کاربران
هیچ کامنتی هنوز ارسال نشده است.
لطفا برای ثبت نظر وارد اکانت خود شوید