«... حین کار با بانکهای اطلاعاتی برای مثال توسط LINQ to Entities ، در SQL نهایی تولیدی به EXISTS ترجمه خواهد شد ... » و این exists روش مناسب و بسیار سریعی هست در حین کار با بانکهای اطلاعاتی (This is now almost 250 times more expensive to do a COUNT(*) vs. an EXISTS).
مطالب
Count یا Any
با وجود امکانات مهیای توسط LINQ ، یک سری از عادات متداول حین کار با گروهی از اشیاء باید کنار گذاشته شوند؛ برای مثال چگونگی بررسی این مطلب که آیا شیء IEnumerable ما حاوی عنصری هست یا خیر.
روش متداول انجام اینکار استفاده از متد Count است. چون این متد پیش از تدارک امکانات LINQ نیز وجود داشته، بنابراین اولین موردی که جهت بررسی آن به ذهن خطور میکند، استفاده از متد Count میباشد؛ برای مثال:
void Method(IEnumerable<Status> statuses)
{
if (statuses != null && statuses.Count() > 0)
// do something...
}
ولی در اینجا هدف ما این است که آیا شیء IEnumerable دارای حداقل یک عنصر است یا خیر؟ بنابراین بجای استفاده از متد Count بهتر است از یکی از extension methods فراهم شده توسط LINQ به نام Any استفاده شود.
کار متد Any ، پس از بررسی اولین عنصر یک مجموعه، خاتمه خواهد یافت و بدیهی است که نسبت به متد Count بسیار سریعتر و کم هزینهتر خواهد بود. علاوه بر آن حین کار با بانکهای اطلاعاتی برای مثال توسط LINQ to Entities ، در SQL نهایی تولیدی به EXISTS ترجمه خواهد شد.
void Method(IEnumerable<Status> statuses)
{
if (statuses != null && statuses.Any())
// do something...
}
از این پس حین استفاده از انواع و اقسام لیستها، آرایهها، IEnumerable ها و امثال آنها، جهت بررسی خالی بودن یا نبودن آنها تنها از متد Any فراهم شده توسط LINQ استفاده نمائید.
if (myArray != null && myArray.Any())
// do something...
نظرات مطالب
تنظیمات مورد نیاز جهت شروع به کار با C# 9.0
یک نکتهی تکمیلی: تداخل ReSharper قدیمی، با C# 9.0
اگر از ویژوال استودیو استفاده میکنید و پس از ارتقاء آن به آخرین نگارش، ویژگیهای جدید C# 9.0 در ادیتور آن تشخیص داده نمیشوند .... مشکل از داشتن ReSharper قدیمی است:
اشتراکها
کتابخانه angular-cropify
Angular directive to crop/select an area of an element such as an image. Possible lightweight Jcrop alternative. Demo
اشتراکها
تغییرات ASP.NET Core در NET 7 RC 2.
اشتراکها