مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

LINQ در Asp.net چیست و چه کاربردی دارد - بررسی چند مثال کاربردی


بسیاری از برنامه های کاربردی داده محور (data-centric) هستند، از این رو، بسیاری از مخزن های داده ، پایگاه های اطلاعاتی رابطه ای هستند. در طور سالیان، طراحان و توسعه دهندگان ، برنامه های کاربردی را بر اساس مدل های شیء طراحی نموده اند.

اشیاء ، مسئول برقراری ارتباط با مؤلفه های دسترسی به داده (که لایه دسترسی به داده Data Access Layer (DAL) نامیده می شود) هستند. در اینجا، سه نکته وجود دارد که باید مورد توجه قرار گیرد:

  • تمام داده های موردنیاز در یک برنامه کاربردی در یک منبع داده یکسان ذخیره نمی شوند. منبع داده می تواند یک پایگاه داده رابطه ای ، چندین شیء business ، فایل XML یا یک سرویس وب باشد.
  • دسترسی به شیء موجود در حافظه راحت تر و با هزینه کمتری از دسترسی به داده در یک پایگاه داده یا فایل XML صورت می گیرد.
  • داده های در دسترس قرار گرفته ، به طور مستقیم مورد استفاده قرار نمی گیرند، بلکه نیاز به مرتب سازی، نظم دهی، گروه بندی و تغییر و غیره دارند.

از این رو، اگر یک ابزاری وجود داشته باشد که در چند خط کد، بتواند تمام انواع دسترسی به داده ها را آسان کرده و اجازه دهد که داده ها را از چنین منابع داده ای جداگانه جمع آوری کنیم و عملیات های پردازش داده استاندارد را بر روی آنها انجام دهیم ، می تواند کمک بسیاری را فراهم نماید.

LINQ  یا  Language-Integrated Query چنین ابزاری است. LNIQ مجموعه ای از توسعه ها برای .Net Framework 3.5 و زبان های مدیریت شده آن می باشد که پرس و جو (Query) را به عنوان یک شیء تنظیم می کند. LNIQ یک syntax مشترک و یک مدل برنامه نویسی برای انواع مختلف پرس و جو داده ها با استفاده از زبان مشترک را تعریف می کند.

عملگرهای رابطه ای مانند Select ، Project ، Join ، Group ، Partition ، عملیات های Set و غیره، در LINQ اجرا می شوند و کامپایلر های C# و VB در Net framework 3.5 که قاعده نوشتاری LINQ را پشتیبانی می کنند، امکان کار با یک مخزن داده پیکربندی شده را بدون متوسل شدن به ADO.NET فراهم می کنند.

برای مثال، پرس و جو کردن جدول Customers در پایگاه داده Northwind ، با استفاده از پرس و جو LINQ در C#، به صورت زیر ، کدنویسی می شود:

var data = from c in dataContext.Customers
where c.Country == "Spain"
select c;

که:

  • کلمه کلیدی ‘from’ به طور منطقی از طریق محتویات مجموعه ، loop ایجاد می کند.
  • کلمه کلیدی ‘where’ ، برای هر شیء در مجموعه ارزیابی می شود.
  • دستور ‘select’ ، شیء ارزیابی شده را انتخاب کرده و برای افزودن به لیست باز می گرداند.
  • کلمه کلیدی ‘var’ برای اعلان متغیر می باشد. از آن جا که نوع دقیق شیء باز گردانده شده ، شناخته نشده است، این کلمه کلیدی نشان می دهد که اطلاعات به صورت پویا استنتاج خواهند شد.

پرس و جو LINQ می تواند برای هر کلاس data-bearing به کار برده شود که از IEnumerable<T> ارث بری می کند، در اینجا T هر نوع داده می باشد، برای مثال List<Book> .

بیایید برای روشن شدن مفاهیم، نگاهی به یک مثال بیاندازیم. این مثال از کلاس Book.cs استفاده می کند.

public class Books
{
   public string ID {get; set;}
   public string Title { get; set; }
   public decimal Price { get; set; }
   public DateTime DateOfRelease { get; set; }

   public static List<Books> GetBooks()
   {
      List<Books> list = new List<Books>();
      list.Add(new Books { ID = "001", 
         Title = "Programming in C#", 
         Price = 634.76m, 
         DateOfRelease = Convert.ToDateTime("2010-02-05") });
     
      list.Add(new Books { ID = "002", 
         Title = "Learn Java in 30 days", 
         Price = 250.76m, 
         DateOfRelease = Convert.ToDateTime("2011-08-15") });
     
      list.Add(new Books { ID = "003", 
         Title = "Programming in ASP.Net 4.0", 
         Price = 700.00m, 
         DateOfRelease = Convert.ToDateTime("2011-02-05") });
     
      list.Add(new Books { ID = "004", 
         Title = "VB.Net Made Easy", 
         Price = 500.99m, 
         DateOfRelease = Convert.ToDateTime("2011-12-31") });
     
      list.Add(new Books { ID = "005", 
         Title = "Programming in C", 
         Price = 314.76m, 
         DateOfRelease = Convert.ToDateTime("2010-02-05") });
     
      list.Add(new Books { ID = "006", 
         Title = "Programming in C++", 
         Price = 456.76m, 
         DateOfRelease = Convert.ToDateTime("2010-02-05") });
     
      list.Add(new Books { ID = "007", 
         Title = "Datebase Developement", 
         Price = 1000.76m, 
         DateOfRelease = Convert.ToDateTime("2010-02-05") });
         
      return list;
   }
}

صفحه وب با استفاده از این کلاس ، یک کنترل label ساده دارد که عناوین کتاب ها را نمایش می دهد. رویداد Page_Load لیستی از کتاب ها را ایجاد می کند و عناوین را با استفاده از پرس و جو LINQ باز می گرداند:

public partial class simplequery : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      List<Books> books = Books.GetBooks();
      var booktitles = from b in books select b.Title;

      foreach (var title in booktitles)
         lblbooks.Text += String.Format("{0} <br />", title);
   }
}

هنگامی که صفحه اجرا می شود، label ، نتایج پرس و جو را نمایش می دهد:

عبارت LINQ بالا به این صورت است:

var booktitles = 
from b in books 
select b.Title;

که برابر با پرس و جو SQL زیر می باشد:

SELECT Title from Books

عملگرهای LINQ

به غیر از عملگرهایی که تا کنون مورد استفاده قرار داده ایم، چندین عملگر دیگر وجود دارند که تمام دستورهای پرس و جو را اجرا می کنند. اجازه دهید نگاهی به برخی از این عملگرها و دستورها بیاندازیم.

دستور Join

دستور 'join' در SQL برای پیوند دادن دو جدول داده استفاده می شود، و یک مجموعه داده را که حاوی ستون های هر دو جدول است، نمایش می دهد. LINQ نیز قادر به انجام این کار است. برای بررسی کردن این موضوع، کلاس دیگری به نام Saledetails.cs ، در پروژه قبلی اضافه می کنیم:

public class Salesdetails
{
   public int sales { get; set; }
   public int pages { get; set; }
   public string ID {get; set;}

   public static IEnumerable<Salesdetails> getsalesdetails()
   { 
      Salesdetails[] sd = 
      {
         new Salesdetails { ID = "001", pages=678, sales = 110000},
         new Salesdetails { ID = "002", pages=789, sales = 60000},
         new Salesdetails { ID = "003", pages=456, sales = 40000},
         new Salesdetails { ID = "004", pages=900, sales = 80000},
         new Salesdetails { ID = "005", pages=456, sales = 90000},
         new Salesdetails { ID = "006", pages=870, sales = 50000},
         new Salesdetails { ID = "007", pages=675, sales = 40000},
      };
      
      return sd.OfType<Salesdetails>();
   }
}

کدهای زیر را به هندلر رویداد Page_Load اضافه می کنیم تا در هر دو جدول با استفاده از دستور join  پرس و جو نماییم:

protected void Page_Load(object sender, EventArgs e)
{
   IEnumerable<Books> books = Books.GetBooks();
   IEnumerable<Salesdetails> sales = Salesdetails.getsalesdetails();
   
   var booktitles = from b in books join s in sales on b.ID equals s.ID
      select new { Name = b.Title, Pages = s.pages };
      
   foreach (var title in booktitles)
      lblbooks.Text += String.Format("{0} <br />", title);
}

صفحه نتیجه به صورت زیر می باشد:

دستور Where

دستور ‘Where’ ، اجازه افزودن برخی از فیلترهای شرطی را به پرس و جوها می دهد. برای مثال، اگر بخواهیم کتاب هایی را ببینیم، که تعداد صفحات آنها بیشتر از 500 صفحه است، هندلر رویداد Page_Load را به صورت زیر تغییر می دهیم:

var booktitles = from b in books join s in sales on b.ID equals s.ID
   where s.pages > 500 select new { Name = b.Title, Pages = s.pages };

این پرس و جو ، فقط آن ردیف هایی را باز می گرداند که در آنها تعداد صفحات بیشتر از 500 می باشند:

دستورات Orderby و Orderbydescending

این دستورات اجازه مرتب سازی نتایج پرس و جو را می دهند. برای پرس و جو کردن عنوان، تعداد صفحات و قیمت کتاب، که بر اساس قیمت مرتب شده اند ، کد زیر را در هندلر رویداد Page_Load می نویسیم:

var booktitles = from b in books join s in sales on b.ID equals s.ID
   orderby b.Price select new { Name = b.Title,  Pages = s.pages, Price = b.Price};

نتایج برگردانده شده به صورت جدول می باشند:

دستور Let

دستور Let ، متغیری را تعریف می کند و یک مقدار محاسبه شده از مقادیر داده را به آن اختصاص می دهد. برای مثال، برای محاسبه فروش کل از دو فروش فوق، نیاز به محاسبه زیر داریم:

TotalSale = Price of the Book * Sales

برای رسیدن به این هدف، قطعه کد زیر را در هندلر رویداد Page_load اضافه می کنیم:

var booktitles = from b in book join s in sales on b.ID equals s.ID
   let totalprofit = (b.Price * s.sales)
   select new { Name = b.Title, TotalSale = totalprofit};

پرس و جو صفحه زیر را نتیجه می دهد:

فصلِ: 5 , تعداد قسمت ها: 176 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل پس از بررسی سیستم مسیریابی و طراحی صفحه نمایش ویدیو ها، به سراغ پنل کاربری خواهیم رفت و مباحث Model Binding و…

توجه: این دوره آموزشی به صورت پیوسته بر اساس آخرین نسخه ی ASP.NET Core بروزرسانی خواهد شد.   آموزش صفر تا صد طراحی سایت اشتراک ویدیو مشابه آپارات با استفاده از  ASP.NET CORE  MVC 3.0 و V…
فصلِ: 8 , تعداد قسمت ها: 357 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: در این مجموعه قصد داریم تا فروشگاه اینترنتی دیجی کالا رو با Asp.Net Core3 پیاده سازی کنیم. ابتدا طراحی قالب دیجی کالا رو به صورت کامل انجام خواهیم داد. در مرحله میریم …
فصلِ: 5 , تعداد قسمت ها: 135 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: در این مجموعه آموزشی، با استفاده از جدیدترین تکنولوژی ها و ابزار های مایکروسافت (دات نت)، به یک پروژه جذاب مدیریت آگهی مشابه دیوار می پردازیم. این آموزش در دو بخش کلی و…
فصلِ: 7 , تعداد قسمت ها: 153 , سطح: صفر تا صد
موضوعات: آموزش ASP.NET

این فصل در یک نگاه:

در این دوره به آموزش صفر تا صد جدیدترین نسخه ASP یعنی CORE جدیدترین ورژن خواهیم پرداخت.این آموزش از سطح مقدماتی تا فوق …

دوره آموزش کامل طراحی وب به همراه پروژه ساخت سیستم مدیریت کتابخانه  این دوره  با کور 1 آغاز می شود و در ادامه پروژه به کور 2 تبدیل می شودو پروژه نهایی (سیستم مدیریت کتابخانه) با Asp.net کور…
فصلِ: 1 , تعداد قسمت ها: 5 , سطح: متوسط

این فصل در یک نگاه:

ساخت محیط کاربریآموزش نحوه ی ارسال ایمیل در Asp.net MVCآموزش تنظیمات Gmail برای استفادهاستفاده از Yahooاستفاده از سرویس …

به نام خدا... در خدمتتون هستم با آموزش ارسال ایمیل در Asp.net MVC... ارسال ایمیل یکی از اجزای اصلی ییک سایت به شمار می رود و واقعا سایتی که برای اجزای مختلفش همانند ثبت کاربر جدید و یا ارسال…
فصلِ: 2 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل دوم در یک نگاه:فصل دوم در یک نگاه:…

در این پکیج به مبحث طراحی وب ، در قالب ساخت یک سایت فروشگاهی 5040 به آدرس http://5040.ir می پردازیم که به جرات مشهورترین و یکی از برترین فروشگاه های مجازی در کشور است. در این مجموعه قصد داری…
فصلِ: 4 , تعداد قسمت ها: 78 , سطح: متوسط

این فصل در یک نگاه:

در این دوره آموزشی، وبسایت ورزش3 را با استفاده از ASP.NET Core پیاده سازی می کنیم و همچنین اپ اندروید آن را هم با Xamarin متصل به سرور سایت طراحی و در نهایت نحوه انتشار آن در مارکت هایی مثل …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: متوسط

این فصل در یک نگاه:

کاملترین آموزش هاست و کار با سی پنل.در هنگام خرید سرویس هاست کلمه ای به نام “کنترل پنل” را زیاد خواهید دید آیا تا به حال…

سی پنل یک کنترل پنل هاست محبوب و معروف در جهان و ایران است. در فیلم آموزش سی پنل هم توصیه اکید شده تا افراد مبتدی و حتی افراد حرفه ای از این کنترل پنل هاست سی پنل استفاده کنند. آموزش cpanel …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…
فصلِ: 1 , تعداد قسمت ها: 15 , سطح: متوسط

این فصل در یک نگاه:

رشد و درآمدزایی یک وب سایت یا کسب و کار اینترنتی کاملا به ذوق و مهارت وب مستر یا همان مدیر اصلی وب سایت گره خورده و متاس…

 اصول مدیریت وب سایت برای وب مستر شدن برای موفقیت یک وب سایت لازم الاجراست. زیرا شما دوست دارید وب سایت خود را به کارخانه پولسازی تبدیل کنید. این واقعیت رویا نیست. هرکس این اصول را بداند به …

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید