در این پست قصد دارم تابعی را معرفی کنم که با کمک اون می توانیم ستونهای دلخواه را از جدول دیتابیس به کمک Entity Framework Core انتخاب کنیم.
ما معمولا برای فیلتر کردن و استفاده از Where در EF مشکلی نداشتیم و می توانستیم به ازای هر تعداد ورودی ای که دریافت میکردیم شرطی را به کوئری اضافه کنیم. به شکل زیر:
اما ما در EF متد یا تابعی را نداریم که با استفاده از آن ستونهای دلخواه مان را فیلتر کنیم و فقط آن ستون ها را از دیتابیس انتخاب کنیم.
برای مثال فرض کنید که ما یک جدولی داریم که 20 ستون دارد و از ما سرویسی خواسته شده که قابلیت دانلود اطلاعات این جدول را در خروجی اکسل از طریق اپلیکیشن ایجاد کنیم. اگر کاربر بخواهد که فقط ستونهایی که نیاز دارد را در خروجی اکسل خود ببیند یک روش این است که کلا استفاده از EF را کنار بگذاریم و به ازای نام ستون هایی که از کاربر دریافت میکنیم Raw SQL بنویسیم و به تعداد ستونهای انتخاب شده آنها را اضافه کنیم.
اما روش دوم و بهتر استفاده از تابعی است که در این پست قصد معرفی کردنش را دارم که به کمک ویژگی های Linq و Lambda Expression پیاده سازی شده است. این تابع کاملا Case insensitive است و درصورتیکه نام پراپرتی موردنظر درست باشد آنرا انتخاب میکند و درغیر این صورت خطا برمیگرداند.
و به طریق زیر استفاده میشود:
پس از اجرای این تابع اگر کوئری ساخته شده توسط EF Core را همانطور که در کنسول این پروژه چاپ کرده ام (یا از طریق SQL Profiler) مشاهده کنید متوجه میشوید که فقط ستونهای خواسته شده در Select statement جنریت شده است.
پایان