همانطور که می دانید SQL زبان ساخت یافته Query یا تقاضا از بانک اطلاعاتی می باشد ، در همین راستا شرکت مایکروسافت در ورژن 3 به بعد دات نت کتابخانه ای به نام LINQ به فضا نام های خود افزوده است

LINQ (لینک) مختصر کلمه Language INtegrated Query  بوده و  یک زبان برای تقاضا از هر گونه مجموعه داده (بانک اطلاعاتی ، آرایه ها ، Xml و...) می باشد . این زبان بسیار شبیه زبان SQL بوده و با زبان های C# و Vb.NET قابل پیاده سازی است .

هدف اصلی خلق LINQ ارائه یک زبان یکتا جهت تقاضا ، برنامه ریزی و فیلتر کردن اطلاعات ذخیره شده در اشیاء مختلف اعم از پایگاه داده ، اشیا ، آرایه ها و از همه مهتر XML است ، این زبان قابلیت Debug شدن به صورت Runtime را دارست و بسیار قابل انعطاف است .

LINQ بسیار مورد پسند توسعه دهندگان وب به وِیژه دوست داران XML قرار گرفت ، شما به وسیله این زبان قادرید به همان سادگی که از  پایگاه داده تقاضا می کنید از یک ساختار XML  یا یک Object نیز تقاضا نمایید .

بنده آموزش LINQ را در سه مقاله ارائه خواهم کرد :

  1. لینک به اشیاء (LINQ to Objects)
  2. لینک به ایکس ام ال (LINQ to XML)
  3. لینک به اس کیو ال (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 myArray
2.             where n > 12
3.             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 Human
07.{
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 Name
18.    {
19.        get
20.        {
21.            return _Name;
22.        }
23.        set
24.        {
25.            _Name = value;
26.        }
27.    }
28.    public int Age
29.    {
30.        get
31.        {
32.            return _Age;
33.        }
34.        set
35.        {
36.            _Age = value;
37.        }
38.    }
39. 
40.    public int Height
41.    {
42.        get
43.        {
44.            return _Height;
45.        }
46.        set
47.        {
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 humanList
2.              where h.Age > 19
3.              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 humanList
08.              where h.Height == 170
09.              select new { h.Name, h.Height });

اگر بلند ترین قد را بخواهیم :

1.var result = (from h in humanList
2.              select h.Height).Max();

اگر نام اولین نفر لیست را بخواهیم :


1.var result = (from h in humanList
2.              select h.Name).First();

 

دقت کنید که در مثال های قبلی به دلیل دریافت چندین مقدار باید از حلقه foreach یک Girdview برای نمایش داده ها استفاده می کردیم ولی در مثال های اخیر چون فقط یک مقدار دریافت می شود از حلقه استفاده نمی کنیم :

 


1.Response.Write(result);

 

اگر بخواهیم اطلاعات کامل فقط 2 نفر از لیست را در Gridview نمایش دهیم  :


1.var result = (from h in humanList
2.              select new { h.Name, h.Height, h.Age }).Take(2);
3.GridView1.DataSource = result;
4.GridView1.DataBind();

اگر بخواهیمافراد لیست را به ترتیب صعودی از سن درخواست کنیم :


1.var result = (from h in humanList
2.     select new { h.Name, h.Height, h.Age }).OrderBy(o => o.Age);

و بسیاری دستورات دیگر که در مقالات بعد با آنها آشنا خواهیم شد .

 منبع : www.how2learnasp.net

در مقاله بعد با LINQ To SQL آشنا خواهیم شد .