Entity Framework 4 part ۹

LINQ To Entities

در بخشهای قبلی در مورد ساختار مدل صحبت کردم و گفتم که یک مدل چگونه ساخته می شود . همچنین بیان کردم که برای انجام پرس و جو چند روش وجود دارد . در این بحش کمی در مورد Linq To Entities  صحبت خواهم کرد ، البیته این بحث بسیار مفصل است که من با دادن لینکهای کاربردی شما را به ادامه آموزش Linq  با مثال از سایت MSDN  دعوت می کنم .


اکنون برای شروع برای اینکه با سایت MSDN  هماهنگ باشیم ما با بانک اطلاعاتی Adventureworks  کار می کنیم . که از این لینک می توانی دانلود کنید . یک پروژه console Application  ایجاد کنید و مدل زیر را برای جدولهای Adress,Contact ,Product,saleorderDetail,SaleorderHeader    از بانک اطلاعاتی ایجاد کنید



اکنون باید با استفاده از دستورات Linq  برای Entites  دستورات کویری بنویسیم . ابتدا دستور select  

یادتان باشد در پروژه خودتان فضاهای نام زیر را حتما اضافه کنید .


using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using System.Globalization;
using System.Data.EntityClient;
using System.Data.SqlClient;
using
System.Data.Common;
موجودیت ما در مدل برنامه به نام AdventureworksEntities  است .. پس حالا اولین کویری خود را می نویسیم . می خواهیم دستوری بنویسیم که رکوردهای جدول Product  را برای ما بازیابی کند .قطعه کد زیر را مطابق شکل در برنامه می نویسیم

خوب اگر به سورس بالا دقت کنید متوجه می شوید که ابتدا باید متغیری  تعریف کنیم که اشاره ای داشته باشد به کلاس AdventureworksEntities  این کلاس در واقع کلاس مدل ما می باشد ، اکنون که متغیری به نام context  تعریف می کنیم که از نوع کلاس AdventureWorksEntities  می باشد .

پس می توانیم به تمام عناصر این کلاس دسترسی داشته باشیم . یکی از موجویتهای این کلاس همان موجویت جدول  Product  است . در سطر بعدی ما باید متغیری تعریف کنیم بصورت آرایه مانند به نام ProductsQuery  که این متغیر بر اساس کویری linq  مقدار می گیرد . حال کویری ما در کادر قرمز رنگ را مشاهده کنید می بینید که یک حلقه ای ایجاد کرده است که این حلقه for  تمام عناصر جدول product موجود در مدل را بصورت یک کلکسیون قابل پیمایش در  متغیر ProductsQuery   بار گذاری می کند .و در نهایت حلقه foreach  این متغیر قابل پیمایش را نمایش می دهد . خواهید دید که چگونه تمام عناصر جدول product  نمایش داده می شوند .


Where

در کویری بالا ما تمام عناصر ستون name  را بازیابی کردیم ، اکنون سوال این است که چگونه می توانیم عمل فیلتر را انجام دهیم ما می خواهیم فقط نام محصولاتی را نمایش دهیم که با که id  آنها یعنی ProductId  به فرض بزرگتراز 120 باشد برای این کار کافیست کویری موجودی در کادر قرمز رنگ را بصورت زیر تغییر دهیم .



Join


حتما در بانکهای اطلاعاتی با کویری مواجه بوده اید که از چندین جدول مرتبط ایجاد می شوند در linq  این کار توسط دستور join  انجام می شود .فرم کلی عبارت بصورت زیر است .


در اینجا منظور از variable  همان متغیرها است که هر کدام نماینده یک جدول خواهند بود . اما collection ها منظور همان موجودیتها ی نشان دهنده جدول در بانک اطلاعاتی است . و سرانجا این دو موجودیت باید در یک فیلدی مشترک باشند . مثال زیر در مورد 2 جدول saleorderDetail , saleorderheader  است .


در مثال بالا ابتدا جدول مبدا و مقصد رابطه ما توسط عبارت from , join  مشخص شده است . سپس بعد از عبارت on  باید مشخص کنیم که این جداول در کدام فیلد مشترک هستند و ارتباط بر اساس کدام فیلد است . سپس عبارت where   اجرا شده است .

بحث در این زمینه بسیار مفصل است که در این مختصر نمی گنجد بنده برای ایجاد هماهنگی در نوشته های با سایت Msdn  مثالهایی را از آن سایت آوردم برای پی گیری بیشتر مثالها می تونید از سایت منبع بقیه مثالهای آموزشی در این مورد را پی گیری کنید .


با تشکر

ادامه دارد...