PDA

View Full Version : آموزش LINQ(قسمت اول)



zkazemi
جمعه 16 مرداد 1388, 18:54 عصر
اغلب این سوال مطرح میشه که LINQ چیه؟، چه نیازی به آن هست ؟، و چرا باید از اون برای انجام کارها استفاده کرد؟
در جواب باید بگم که LINQ یه زبان از عملگر های کوئری استاندارد است که امکان جستجو ، فیلتر و اجرای انواع کوئری ها را روی منابع داده ای مختلف اعم از XML(LINQ to XML یا XLINQ) ، داده های ارتباطی (LINQ to SQL یا DLINQ) ، Dataset های ADO.NET(LINQ to Dataset) و کالکشن های موجود در حافظه را فراهم می کند.
در کنفرانس توسعه دهندگان حرفه ای ماکروسافت(PDC) که در سال 2005 برگزار شد anders Hejlsberg و تیمش یک زبان جدید به نام LINQ(Language integrated query) را که شیوه جدید جهت دریافت داده ها در دات نت را معرفی می کرد ، اعلام نمودند. LINQ یک فرم خاص برای دریافت داده ها از هر نوع شی که توسط اینترفیس IEnumerable<t> قابل پیاده سازی یا پشتیبانی باشد فراهم می کند.LINQ با انواع آرایه ها ، مجموعه ها ، داده های ارتباطی و XML سروکار دارد.
با استفاده از LINQ شما می توانید از یک سینتکس ساده و یکسان برای دریافت داده ها از هر منبع داده ای استفاده نمایید.



var query = from e in employees
where e.id == 1
select e.name

به مثال بالا توجه کنید. این یک pseudocode نیست . بلکه سینتکس زبان LINQ ست. همانطور که مشاهده می کنید خیلی شبیه SQL است .با LINq شما می تونید انواع کوئری های پیچیده را با استفاده از توابع جمعی ، اتصالات ، مرتب سازی و... بنویسید.
در شکل زیر بالاترین سطح زبان های مورد پشتیبانی LINQ را نشان می دهد . در حال حاضر LINQ به طور کامل توسط دوزبان C#3.0 و VB 9.0 قابل پشتیبانی است. سطح میانی سه قسمت اصلی یک پروژه LINQ را نشان می دهد.

http://barnamenevis.org/forum/attachment.php?attachmentid=34897&stc=1&d=1249705903

1- LINQ to Object : یک API است که متد هایی را جهت دریافت داده ها از هر نوع Object ای که اینترفیس IEnumerable<t> را پیاده سازی می کند فراهم می کند.در واقع اصطلاح LINQ to Object به استفاده از کوئری های LINQ که با هر کالکشنی که مستقیما از اینترفیس های IEnumerable یا IEnumerable<T> استفاده می کنند، بدون استفاده از Provider زبان LINQ واسط ویا API هایی از قبیل LINQ to SQL و یا LINQ to XML اطلاق می شود. شما می توانید برای این نوع از هر مجموعه شمارشی از قبیل List(T) ها یا Array ها یا Dictionary(TKey,TValue) استفاه نمایید. این مجموعه ها ممکن است توسط هر کاربری ساخته شوند و یا توسط یک API مربوط به .NET Framework باز گشت داده شوند.LINQ to Object یک شیوه جدید جهت دسترسی به داده ها رو فراهم می کند. در گذشته و با روش های قدیمی شما Foreach های پیچیده ای رو جهت دریافت و دسترسی به داده های یک Collection می نوشتید. اما با LINQ شما به سادگی و با کد های خیلی کوتاهتر می توانید تعیین کنید که چه داده هایی برگشت داده شوند. می توان گفت کوئری های LINQ سه مزیت اصلی نسبت به حلقه های foreach دارند.
خیلی کوتاه و خواناتر هستند .این ویژگی زمانی که عمل فیلتر بر روی دسته ای از شرایط اعمال می شود بیشتر به چشم می خورد .
امکان ایجاد فیلتر های بسیار پیشرفته ، مرتب سازی داده های برگشت داده شده و گروهبندی آنها را با حداقل کد فراهم می کند.
امکان اتصال به دیگر منابع داده را فراهم می کنند

2- LINQ to ADO.NET: LINQ to ADO.NET شامل دو تکنولوژی جدا از هم است : LINQ to DataSet و LINQ to SQL . LINq to DataSet امکان دسترسی و اجرای کوئری ها را روی DataSet فراهم می کند. وبا LINQ to SQL شما قادر به استفاده مستقیم از کوئری های sql server می نماید. Provider که برای LINQ to Dataset و LINQ to SQL ساخته شده است داده های منبع را به مجموعه های شی ای IEnumerable تبدیل می کند. برنامه همیشه داده ها را به عنوان یک مجموعه IEnumerable نمایش می دهد.
3- LINQ to SQL : این نوع جهت اجرای کوئری ها روی پایگاه داده رابطه ای SQL Server می باشد.
4- LINQ to XML: ایجاد کوئری ها برای یک منبع داده XML می باشد.