در مطلب پیشین در مورد LINQ و کاربرد آن در Entity Framework تا اندازه ای صحبت کرده ایم و در این مطلب در ادامه آموزش های LINQ و Entity Framework می خواهیم در مورد متد و عبارت Select در LINQ برای انجام پرس و جو درون Entity Framework صحبت کنیم. در این مطلب هم Select را بروی اشیا سی شارپ و هم بر روی شی Dbset در Entity Framework اجرا می کنیم. همچنین دو شیوه متدی (Method Syntaxt) و هم شیوه کوئری (Query Syntaxt) را به کار خواهیم برد.

بدست آوردن برخی از ستون ها

در مطلب های پیش در صورتی که فرمان context.Users اجرا می شد، تمامی سطرها به همراه تمامی ستون ها از جدول واکشی و درون یک شی از سی شارپ ذخیره می شد. در کد شکل زیر می خواهیم چگونگی واکشی تمامی سطرها برای سه ستون LastName و Age و City را آموزش دهیم. در واقع با کد شکل زیر به دنبال شبیه سازی کد SQL زیر هستیم.

در شکل بالا همانند مطلب های پیشین بوسیله فرمان context.Users تمانی سطرهای جدول واکشی شده و سپس بوسیله متد ()Select از LINQ و با ایجاد یک نمونه بوسیله عبارت new تنها خصوصیت های LastName و Age و City از کلاس موجودیت User درون متغیر allUser ذخیره می شوند. به یاد دارید که توضیح دادیم، Entity Framework به عنوان واسطه ای میان برنامه سی شارپ (یا VB.NET) و پایگاه داده است و باید مقدارهای برگشتی از پایگاه داده که همان ستون ها و سطرهای جدول هستند را به شی و خصوصیت های سی شارپ تبدیل کنند، پس با عبارت new درون متد ()Select از LINQ تنها سه خصوصیت دلخواه را درون متغیر allUser ذخیره می کنیم. سپس بوسیله متد ()GetType نوع متغیر allUser در شکل زیر نشان داده شده است.

در شکل بالا می بینید که نوع متغیر allUser از کلاس DbQuery است و شامل سه فیلد (خصوصیت) از نوع رشته (LastName)، عدد صحصیح (Age) و رشته (City) است. در کد شکل زیر که همانند شکل بالا است، می خواهیم محتوای خود متغیر allUser را نمایش دهیم، پس دیگر درون تابع ()WriteLine متد ()GetType فراخوانی نشده است. با توجه به شکل زیر و اینکه متغیر allUser از نوع کلاس DbQuery است، می بینید که محتوای آن شبیه به کوئری های SQL است.

در مطلب های پیشین گفتیم که برای کار با LINQ و انجام کوئری روی اشیا و منابع داده و همچنین انجام کوئری درون Entity Framework می بایست فضای نام System.Linq به درون برنامه های سی شارپ ضمیمه شده باشد. در شکل زیر چون خط using System.Linq را توضیح (Comment) کرده ایم، پس می بینید دیگر متد ()Select نشاخته شده نیست و خطایی در ویژوال استادیو نشان داده شده است. البته خود ویژوال استادیو در فایل Program.cs به صورت پیش فرض فضای نام System.Linq را ضمیمه می کند.

در شکل سمت چپ زیر بوسیله متد ()Count از LINQ می توانیم تعداد سطرهای واکشی شده از جدول را نمایش دهیم. درشکل دیگر و در حلقه foreach زمانی که می خواهیم سطرهای واکشی شده را نمایش دهیم، می بینید که تنها سه خصوصیت LastName و Age و City قابل دسترسی هستند زیرا در خود کوئری، تنها همین سه خصوصیت یا همین سه ستون را درخواست کرده بودیم.

واکشی تمامی سطرها

در کد شکل زیر می خواهیم تمامی سطرا را واکشی کنیم، پس درون متد ()Select دیگر توسط عبارت new نوع جدید را ایجاد نمی کنیم. همچنین در شکل زیر می بینید چون تمامی سطرها و ستون ها را می خواهیم، پس در متد ()WriteLine تمامی ستون ها (خصوصیت ها) قابل دسترسی هستند. در شکل دوم (سمت راست) درون حلقه for تمامی سطرها نشان داده می شوند.

در شکل زیر نخست متدی به نام ()ShowUser تعریف شده است که یک ورودی از نوع UserContext یا همان کلاس Context دریافت می کند تا پس از این از آن درون عبارت using استفاده شود. درون متد همانند آن چیزی است که پیش از این توضیح داده بودیم. در متد ()Main نخست یک نمونه از کلاس Context ایجاد و سپس به متد ()ShowUser فرستاده می شود. توجه کنید تمامی کدهای این مطلب به صورت Method Syntaxt هستند، برای تمرین لطفا آنها را به شیوه Query Syntaxt برگردانید.

دانلود سورس برنامه های این مطلب Entity Framework Select LINQ