سه شنبه ۸ فروردین ۱۳۹۶
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 برنامه نویسی LINQ در دات نت
.NET Database / LINQ / EF
تاریخ ثبت:  ۸۹/۱۱/۸
تعداد نمایش:  ۷۹۹۲
  نویسنده: نوید نوری
 
   ۱۲  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

-          LINQ چیست؟

-          LINQ چه عملی انجام می دهد؟

-          چگونه می توان از LINQ استفاده کرد؟

-          چرا LINQ بوجود آمده است؟

-          چه نوع استفاده هایی دارد؟


مقدمه

اینها سوالاتی بودند که وقتی برای اولین بار نام LINQ را شنیدم ، برایم مطرح شده بود و نمی دانستم از کجا شروع کنم و اصلا چرا باید به LINQ مهاجرت کنم. مگر چه مزیتی بر ADO.net یا سایر تکنولوژیهای .Net دارد. اما از آنجا که بنا به درخواست مجبور به استفاده  از LINQ در یکی از پروژه ها بودم ، بناچار یادگرفتم که چکار باید بکنم.

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

نکته مهم: همینجا می گویم این مقاله هیچ ربطی به هیچ کتاب یا مقاله یا MSDN یا هیچ مرجعی ندارد و فقط دیدگاه و نحوه برنامه نویسی بنده با این تکنولوژی در C#.net می باشد. حالا درست یا غلط بماند، مهم این است که این دیدگاه بنده از LINQ ، جواب داده و مشکلی برایم پیش نیاورده و نیازهایم را برطرف می کند.

LINQ چیست؟

مایکروسافت در  .net 3.5 تکنولوژی جدیدی را تحت عنوان LINQ معرفی کرد که کاملا" بر اساس شی گرایی و ایجاد نمونه از کلاسهای مختلف می باشد. آنچه من درک کرده ام این است که با استفاده از این تکنولوژی شما می توانید از همه چیز ،نمونه بسازید و خواصیتها آنرا استفاده کنید.

اصلا چرا نمونه می سازیم؟ خیلی ساده بگویم. برای اینکه از خاصیتهای آن کلاس با استفاده از  آن شیئ ایجاد شده در جاهای مختلف استفاده کنیم!!! (که چکار کنیم؟) که با استفاده از خواصیتها بتوانیم برنامه نویسی پویا و شیئ گرایی داشته باشیم که اشیاء را در جاهای مختلف استفاده کنیم.

اما اینکه LINQ برای چه بوجود آمده؟

من تابحال برای نوشتن یک insert  در بانک اطلاعات منابع مختلفی را صدا می زدم اما در حال حاضر تنها یک فیلد نام را در DATABASE ذخیره می کنم:

ADO.NET

using System.Data.SqlClient;
 
string ConnectionStr = "Data Source=;Initial Catalog=speer1;integrated security=true";
 
string commandStr;
 
DataSet dataset;
 
SqlDataAdapter adapter;
 
SqlCommandBuilder command;
 
DataTable table;
 
DataRow row;
 
commandStr = "select * from tcostumer";
 
adapter = new SqlDataAdapter(commandStr, ConnectionStr);
 
dataset = new DataSet();
 
adapter.Fill(dataset, "tcostumer");
 
table = dataset.Tables[0];
 
DataRow newRow = table.NewRow();
 
newRow["name"] = NameTXT.Text.Trim();
 
dataset.Tables["tcostumer"].Rows.Add(newRow);
 
command = new SqlCommandBuilder(adapter);
 
adapter = command.DataAdapter;
 
adapter.Update(dataset, "tcostumer");

استفاده از LINQ :

Add New Item to project à select data à Linq to SQL (Named MyLinqObj) à

 connect to database à bring the tcostumer table in MyLinqObj

می خواهم این فیلد را با استفاده از LINQ داخل بانک قرار بدم:

using System.Data.Linq.SqlClient;
 
MyLinqObj budgetDataContext = new MyLinqObj();
 
List<tcostumer> custObj = budgetDataContext.tcostumer.ToList();
 
custObj.name = NameTXT.Text.Trim();
 
budgetDataContext.tcostumer.InsertOnSubmit(custObj);
 
budgetDataContext.SubmitChanges();

همین !

در ادامه : شروع برنامه نویسی با LINQ بدون هیچ پیش گفتار

در قسمت Solution Explorer می خواهیم آیتم جدیدی اضافه کنیم. از قسمت Data گزینه Linq To DataBase  را انتخاب کنید و نام آنرا مشخص کنید مثلا MyLinqObj . با این کار فایل .dbml (تقریبا چیزی شبیه به مدیر ارتباط با پایگاه) به پروژه اضافه میشود. به شکل زیر توجه کنید:




 

حالا جداول دیتابیس که قرار است روی آنها تغییراتی اعمال شود به قسمت designer فایل dbml . اضافه می کنیم. (dragging to .dbml )

حال می توانیم وارد کد نویسی شویم.

ابتدا باید نمونه ای از این فایل dbml ایجاد کنیم:

 

public DataClasses1DataContext dbContext = new DataClasses1DataContext();

 

اضافه کردن به پایگاه داده:

NameTable name1 = new NameTable(); // آبجکتی از نام جدول مورد نظر می سازیم
 
name1.Name = nametxt.Text; //  از تکس باکس اطلاعات را با فیلد های مربوطه در جدول وارد می کنیم
 
name1.Tel = Convert.ToInt64(teltxt.Text);
 
dbContext.NameTables.InsertOnSubmit(name1); // درپایان اطلاعات جدیدرابه جدول واردمیکنیم
 
dbContext.SubmitChanges(); // عملیات پایانی که اطلاعات را ثبت نهایی می کند

 

ویرایش :

خیلی مشکل نیست فقط باید یک مقایسه انجام شود با textbox مورد نظر و سپس سایر اطلاعات آن فیلد را با دستورات روتین انتخاب میکنیم.

NameTable name2 = dbContext.NameTables.Where(p=>p.Name.Trim() == nametxt.Text.Trim()).FirstOrDefault();
 
name2.Name = nametxt.Text;
 
name2.Tel = Convert.ToInt64(teltxt.Text);
 
dbContext.SubmitChanges();

حذف :

NameTable name3 = dbContext.NameTables.Where(p=>p.Name.Trim()== nametxt.Text.Trim()).FirstOrDefault();
 
dbContext.NameTables.DeleteOnSubmit(name3);
 
dbContext.SubmitChanges();


انتخاب لیستی از اطلاعات ثبت شده از دیتابیس برای اضافه کردن در
gridview :

 

List<NameTable> nameList = dbContext.NameTables.OrderBy(p => p.Name).ToList();
foreach (var item in nameList)
{
     dataGridView1.Rows.Add(item.Name, item.tel);
}

            

نحوه استفاده از LINQ:

در تمام دستورات بالا و سایر دستورات مربوط به ساختار برنامه نویسی با LINQ چند نکته ثابت وجود دارد که با رعایت آنها می توان از این تکنیک به راحتی استفاده کرد:

-          انتخاب از نام جدول مورد نظر: از نام جدول برای مشخص کردن هدف دستور مربوطه استفاده می کنیم. یعنی نام جدول اعلام می کند که قصد داریم از این قسمت از پایگاه برای انجام عملیات استفاده کنیم چه بصورت تهیه لیستی از اطلاعات ثبت شده یا چه بصورت اعلام سایر فیلدهای مربوط به یک داده مشخص یا ...

-          تهیه آبجکتی از جدول مورد نظر

-          اعلام نام شیئی که به ابزار پایگاه ما مرتبط می باشد. یعنی می خواهیم از کدام DataContext استفاده کنیم.

-          اعلام جدول موجود در آبجکت مربوط به DataContext

-          شرط انتخاب اطلاعات از جدول در صورت نیاز: میخواهیم بگوییم از جدول مربوطه و مد نظر کدام عناصر را انتخاب کن؟ این کار با یک دستور Where و انتخاب اشیاء آن جدول و مقایسه آن با شرط مورد نظر ما انجام میگیرد یعنی:

Where (p => p.FieldName == (Decision))

-          اعلام شایر شرطها مثلا مرتب سازی با همان ساختار شرط انتخاب

-          تهیه لیست یا انتخاب نوع در پایان کوئری

 به همین سادگی یک query در LINQ ساختیم. بجای آنکه بگوییم :

“Select name From NameTable where personelNumber Like =%”+TextBox1.text;

میگوییم:

List<nameTable> obj = DataContextObj.nameTable.Where( p=> p.name.Contains(textbox1.text)).toList();

 این شرحی از ساختمان LINQ بود اما مطلب در اینجا خلاصه نمی شود.

من در این مقاله فقط نحوه استفاده ابتدایی از لینک را توضیح دادم.

در مقاله بعدی نحوه ساخت پروسه های از پیش تعریف شده و بیان عیبهای مربوطه و استفاده از LINQ در لایه بندی را عنوان خواهم کرد.

 

با آرزوی موفقیت


 

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
نوید نوری
برنامه نویسی مالی در سی شارپ (زمستان89) سیستم کنترل پروژه و بودجه کار (زمستان91)
همه مقاله های نوشته شده توسط این کاربر (۲)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۱ از مجموع ۱ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
سرعت LINQ امير حسين محمدپور اوجور ۱۳۹۰/۱/۳
پاسخ به: سرعت LINQ نوید نوری ۱۳۹۰/۱/۳
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to