آموزش LINQ to Object
همانطور که می دانید SQL زبان ساخت یافته Query یا تقاضا از بانک اطلاعاتی می باشد ، در همین راستا شرکت مایکروسافت در ورژن 3 به بعد دات نت کتابخانه ای به نام LINQ به فضا نام های خود افزوده است
LINQ (لینک) مختصر کلمه Language INtegrated Query بوده و یک زبان برای تقاضا از هر گونه مجموعه داده (بانک اطلاعاتی ، آرایه ها ، Xml و...) می باشد . این زبان بسیار شبیه زبان SQL بوده و با زبان های C# و Vb.NET قابل پیاده سازی است .
هدف اصلی خلق LINQ ارائه یک زبان یکتا جهت تقاضا ، برنامه ریزی و فیلتر کردن اطلاعات ذخیره شده در اشیاء مختلف اعم از پایگاه داده ، اشیا ، آرایه ها و از همه مهتر XML است ، این زبان قابلیت Debug شدن به صورت Runtime را دارست و بسیار قابل انعطاف است .
LINQ بسیار مورد پسند توسعه دهندگان وب به وِیژه دوست داران XML قرار گرفت ، شما به وسیله این زبان قادرید به همان سادگی که از پایگاه داده تقاضا می کنید از یک ساختار XML یا یک Object نیز تقاضا نمایید .
بنده آموزش LINQ را در سه مقاله ارائه خواهم کرد :
- لینک به اشیاء (LINQ to Objects)
- لینک به ایکس ام ال (LINQ to XML)
- لینک به اس کیو ال (LINQ to SQL)
قسمت اول لینک به XML :
قبل از شروع کار دقت نمایید که Dot Net FrameWork 3.5 بر روی سیستم شما نصب شده باشد
یک پروژه Asp.NET توسط Visual Studio 2008 ایجاد نمایید (دقت کنید لیست بازشو Framework 3.5 را انتخاب کرده باشد) قصد دارم با یک مثال خیلی ساده لینک به اشیاء را توضیح دهم .
فرض کنید یک آرایه داریم ، میخواهیم یک سری اعمال متداول که به توسط بانک اطلاعاتی به سادگی امکان پذیر است بر روی این آرایه انجام دهیم ، این اعمال در صورت نبود LINQ بسیار دشوار خواهد بود .
یک آرایه به صورت زیر ایجاد نمایید :
1.int[] myArray = new int[] { 15, 17, 16, 20, 12, 14, 10, 13,
15, 15, 18, 19 };فرض می کنیم این اعداد نمرات درس پایگاه داده دانشجویان رشته کامپیوتر می باشد .
میخواهیم نمرات بالاتر از 12 را نمایش دهیم :
1.var result = from n
in myArray2. where n > 123. select n;همانطور که ملاحظه می کنید دستورات فوق بسیار شبیه دستورات SQL است البته جای قرار گیری دستورات کمی تغییر کرده است ، با این دستور به سادگی لیست تمام نمرات بالاتر از 12 را واکشی کردیم .
اکنون میتوانیم این داده ها را داخل یک حلقه چاپ کنیم :
1.foreach (int a
in result)2.{3. Response.Write(a.ToString() + "");4.}یا به یک کنترل داده ای مانند Gridview بایند نماییم :
1.GridView1.DataSource =
result;2.GridView1.DataBind();برای مثال بعد ابتدا یک نگاه به سری مقالات بنده در مورد شی گرایی بیاندازید .
یک کلاس به صورت زیر با سه خاصیت نام ، قد ، سن ایجاد می کنیم :
01.using System;02.using System.Collections.Generic;03.using System.Linq;04.using System.Web;05. 06.public class Human07.{08. int _Age = 0;09. int _Height =
0;10. string _Name = "";11. public Human(int objAge, int objHeight, string objName)12. {13. _Age = objAge;14. _Height = objHeight;15. _Name = objName;16. }17. public string Name18. {19. get20. {21. return _Name;22. }23. set24. {25. _Name = value;26. }27. }28. public int Age29. {30. get31. {32. return _Age;33. }34. set35. {36. _Age = value;37. }38. }39. 40. public int Height41. {42. get43. {44. return _Height;45. }46. set47. {48. _Height = value;49. }50. }51. 52.}اکنون یک لیست از چند نمونه از این کلاس میسازیم :
1.List
humanList = new List();2.humanList.Add(new Human(25, 170, "Ali"));3.humanList.Add(new Human(23, 170, "Amir"));4.humanList.Add(new Human(15, 160, "Maryam"));5.humanList.Add(new Human(18, 165, "Leila"));می خواهیم توسط دستورات LINQ نام افرادی که سن آنها بیشتر از 19 سال می باشد را درخواست کنیم ، به سادگی داریم :
1.var result = from h
in humanList2. where h.Age > 193. select
h.Name;اگر بخواهیم نام و قد افرادی که قد آنها 170 است درخواست کنیم داریم :
01.List
humanList = new List();02.humanList.Add(new Human(25, 170, "Ali"));03.humanList.Add(new Human(23, 170, "Amir"));04.humanList.Add(new Human(15, 160, "Maryam"));05.humanList.Add(new Human(18, 165, "Leila"));06. 07.var result = (from h
in humanList08. where h.Height == 17009. select new { h.Name, h.Height });اگر بلند ترین قد را بخواهیم :
1.var result = (from h
in humanList2. select
h.Height).Max();اگر نام اولین نفر لیست را بخواهیم :
1.var result = (from h in
humanList2. select
h.Name).First();
دقت کنید که در مثال های قبلی به دلیل دریافت چندین مقدار باید از حلقه foreach یک Girdview برای نمایش داده ها استفاده می کردیم ولی در مثال های اخیر چون فقط یک مقدار دریافت می شود از حلقه استفاده نمی کنیم :
1.Response.Write(result);
اگر بخواهیم اطلاعات کامل فقط 2 نفر از لیست را در Gridview نمایش دهیم :
1.var result = (from h in
humanList2. select new { h.Name, h.Height, h.Age
}).Take(2);3.GridView1.DataSource =
result;4.GridView1.DataBind();اگر بخواهیمافراد لیست را به ترتیب صعودی از سن درخواست کنیم :
1.var result = (from h
in humanList2. select new { h.Name, h.Height, h.Age }).OrderBy(o =>
o.Age);و بسیاری دستورات دیگر که در مقالات بعد با آنها آشنا خواهیم شد .
منبع : www.how2learnasp.net
a day without learning is a lost day