# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  اگر علاقه ای به LINQ دارید وارد شوید

## mina.net

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

    Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}
        ' Query creation.
        Dim evensQuery = From num In numbers _
                         Where num Mod 2 = 0 _
                         Select num
        ' Query execution.
        For Each number In evensQuery
            Console.Write(number & " ")
            MsgBox(number)
        Next

    End Sub


کد بالا را در رویداد کلیک یک button بنویسید و نتیجه ان را ببینید.
به یاد داشته باشید این فقط یک نمونه ساده است.

----------


## s.k711

[_quote=mina.net;629116]سلام دوستان_
_من خوئم چیز زیادی در باره LINQ نمی دانم و این تاپیک را گذاشتم تا بلکه دوستان تشویق شده و بیشتر به این موضوع بپردازند._
_نمونه کد زیر یک مثال بسیار ساده هست لطفا هر کس نمونه برنامه یا توضیحاتی اگر می تواند ارائه نماید ._
__
_    Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}_
_        ' Query creation._
_        Dim evensQuery = From num In numbers __
_                         Where num Mod 2 = 0 __
_                         Select num_
_        ' Query execution._
_        For Each number In evensQuery_
_            Console.Write(number & " ")_
_            MsgBox(number)_
_        Next_

_    End Sub_


_کد بالا را در رویداد کلیک یک button بنویسید و نتیجه ان را ببینید._
_به یاد داشته باشید این فقط یک نمونه ساده است.[/quote]_


سلام دوست عزيز خيلي ممنون از كدتون. ميشه بگيد دقيقا اين كد چه كار مي كتد؟

----------


## odiseh

ممنون از اینکه ای تاپیک رو ایجاد کردید،
اگه میشه در مورد متغیر evensQuery توضیح بدین. این مقداری که گرفته چیه و به چه زبایه؟

----------


## mostafaaa

سلام
البته من در مورد LINQ خودم تازه کارم و تجربه چندانی ندارم . ولی از اونجایی که SQL رو تقریبا خوب بلدم و با توجه به مشابهت های LINQ با SQL تا به حال در استفاده ازش مشکلی نداشتم. 
در هر صورت با اجازه دوستمون Mina.net در مورد کد بالا کمی توضیح میدم.
خط اول که مشخص تعریف آرایه ای از اعداد که قرار کوئری ما بر روی این آرایه اعمال بشه.
در خط دوم با کلمه کلیدی FROM یه واریابل از نوع OBject با نام num ایجاد میشه و با کلمه کلیدی IN مشخص میکنیم که کوئری مربوطه بر روی چه  شیی انجام میشه که میتونه آرایه یا DataSet یا DataTable یا ... باشه. با کلمه کلید WHERE هم که کاملا مشخصه که شروط کوئریمون رو داریم تعریف میکنیم و مشکلی هم فکر نمیکنم باهاش داشته باشید. خط آخر هم وجود و عدم وجودش در خروجیمون توی این کو ئری تفاوتی ایجاد نمیکنه.
در واقع کد زیر بدون استفاده از LINQ و مشابه کد دوستمونه. که خرو جیهاشون یکیه
        Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}
        For Each Num As Integer In numbers
            If Num Mod 2 = 0 Then MsgBox(Num)
        Next

----------


## mina.net

سلام 
از دوست خوبم mostafa تشکر می کنم که کارم را ساده تر نمودند
دوستان همان طور که می دانید LINQ یک مبحث جدید می باشد و فکر می کنم فقط در 2008 انجام بشه البته مطمئن نیستم خواهش می کنم دوستانی که 2005 نصب دارند ازمایش کنند ونتیجه را اطلاع دهند اما یک کد جدید براتان می زارم که دیروز از msdn  بیرون کشیدم

     'يک ارايه معرفي مي کند
        Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
        ' اعدادي که زوج هستند را پيدا مي کند
        Dim evensQuery = From num In numbers Where num Mod 2 = 0 Select num
        '  اعداد زوج نمايش مي يابد
        For Each number In evensQuery
            MsgBox(number)
        Next
        ' اعداد زوج شناساي مي شود
        For Each number In evensQuery
            Console.Write(number & " ")
        Next
        MessageBox.Show(evensQuery.Any, "Any" & "اين تابع نشان مي دهد که مقداري وجود دارد يا نه")
        Try
            MessageBox.Show(evensQuery.Count, "Count" & "اين تابع تعداد را نشان مي دهد ")
            MessageBox.Show(evensQuery.Max, "Max" & "اين تابع بزرگترين را نشان مي دهد ")
            MessageBox.Show(evensQuery.Min, "Min" & "اين تابع کوچکترين را نشان مي دهد ")
            MessageBox.Show(evensQuery.Sum, "Sum" & "اين تابع مجموع را نشان مي دهد ")
            MessageBox.Show(evensQuery.Average, "Average" & "اين تابع ميانگين را نشان مي دهد ")
            MessageBox.Show(evensQuery.First, "First" & "اين تابع اولين را نشان مي دهد ")
            MessageBox.Show(evensQuery.Last, "Last" & "اين تابع اخرين را نشان مي دهد ")
        Catch ex As Exception
        End Try

یک کد دیگه هم اینه امیدوارم مفید باشه

 
   Dim numberArray() As Integer = {0, 1, 2, 3, 4, 5, 6}
        Dim evensQuery2 = From num In numberArray Where num Mod 2 = 0 Select num
        For Each number In evensQuery2
            MessageBox.Show(number, "اين تابع تمام اعضا را نشان مي دهد ")
        Next
        ' مقدار جديد را جايگزين مي کند
        numberArray(1) = 10
        numberArray(4) = 22
        numberArray(6) = 8
        For Each number In evensQuery2
            MessageBox.Show(number, "اين تابع تمام اعضا جايگزين را نشان مي دهد ")
        Next
 


دوستان به یاد داشته باشید من خودم در حال یاد گیری LINQ می باشم و از شما انتظار کمک بیشتر دارم

موفق باشید

----------


## mina.net

سلام دوستان
انتظار بیشتر از دوستان برای همفکری در ضمینه linq داشتم لطفا مطلب جدید در این ضمینه می دانید در این تاپیک قرار بدید

کد زیر حروف یک  string را در یک ارایه قرار داده و توسط msgbox به ترتیب نمایش می یابد.
   Dim qoury = From str In "سلام دوستان بیاید با هم لینکیو بیاموزیم" 'Where str <> " "
        MsgBox(qoury.Count)
        For Each str In qoury
            If str = " " Then
                MsgBox("فاصله")
            Else
                MsgBox(str)
            End If
        Next


موفق باشید

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

----------


## odiseh

سلام Mina.NET
من یه سوال داشتم. ما توی SQL می تونیم برای جداولمون Index تعریف کنیم اما اینجا اگه Query هامن رو با Linq بنویسیم، چطوری سرعت اجرای اونا رو بهینه کنیم؟
در ضمن، ظاهرا دو روش برای نوشتن Query وجود داره. یکی expression و یکی هم  method.
اون روش method سختتر هستش. اگه میشه راجع به اون توضیحاتی رو بنویسین.

با تشکر از شما بابت ایجاد این تاپیک مفید .

----------


## rooshan2008

سلام 
به همه دوستان بخصوص Mina.net  که این تاپیک رو ایجاد کرد من هم یک چیزی میزارم ولی بدلیل زیغ وقت  تمی تونم خیلی خوب توضیح بدم سعی می کنم کم کم کاملش کنم  
همون طور که دوستان قبلش توضیح دادن:

Language-Integrated Query (LINQ)*یه زبان پرسش برای کار با انواع مختلف  دادها  است . با وجود ای زبان که جزوی از ویبی  هم شده  نیازی نیست شما دید خودتون رو برای کار بادادهای مختلف عوض کنید  مثلاً :*

*-دنبال مقداری داخل یک آرایه بگردید(همان طور که دوستان تو مطالب قبلی گفتن)*
*- وقتی دستور اسکیوال صادر می کنید ،  بادید مجزا ازبرنامه نویسی شی گرا سطح زبان خود پرسش خود را اعلام  کنید .*
*و غیره ....*

*بخاطر اینکه شما از این به بعد بجای اینکه دستور اسکیوال بنویسید کدی با سینتکس وبی می نویسید. مهمترین نکته این زبان این هست که شما برای کار با انواع دادهای از دستورات* *Linq**استفاده می کنید و نیازی نیست برای هر**نوع داده ای از سبک خاص یا ابزاری جدید استفده کنید مثلاً  شما برای کار با* *Collection** ها  و دیتابیس* *Ado.net dataset* * و خیلی از انواع دادها از این زبان استفاده می کنید.* *(Linq)*

*یک مثال با ببنید:*
*1-یک Connectionبرای اتصال به بانک خود درست کنید از منوی << Data Add New Data Source  ایجاد کنید من در مثال خودم از بانک  northwind استفاده کردم*
*2- دیتا ست و ابزا های اتصال به بانک  مورد نظر را روی فرم خود قرار دهید.*

*2-این کد رو جایی که می خواهید فیلتر رو انجام بدید قرار بدهید...*
Dim Linq1 = From C In NorthwindDataSet.Customers Where C.CompanyName Like TextBox1.Text + "*" Select CDataGrid1.DataSource = Linq1.ToList*-به جا هایی که قرمز شده توجه کنید (پرسپولیس) منظور همون دیتاستی هست که شما تو قسمت قبل درست کرده بودین و روی فرم خودتون گزاشته بودین.*
*-جایی هم که سبز شده منظور همون* *textbox** هست که شما می خواهید بر اساس اون جدول رو فیلتر می کنید.*
*جایی هم که رنگ زرد شده منظور این هست که نتیجه فیلتر رو به صورت لیست در آورده و اون رو به عنوان* *dataSource** به* * dataGrid** انتصاب بده*

*روش دوم : که من خیلی تو پروژه هام ازش استفاده می کنم البته تا حالا یک با فقط پروژه بزرگ انجام داده و حدود 5/1 هست که روش داریم کار می کنیم(البته خیلی بزرگ هست خیلی خیلی)*
*یه پروژه جدید Windows Apliction جدید باز کنید .*
*از منوی project  گزینه Add new items  رو بزنید از کادر باز شده سمت چپ data  رو انتخاب کنید و بعد از گزینه هایی که در سمت راست ظاهر می شوند Linq to Sql Classes رو انتخاب کنید و Add ؤو بزنید.*
*بعد مثل شکل پایین:*
** Dim Linq AsNew DataClasses1DataContext
Dim Linq1 = From C In Linq.Customers Select C
DataGrid1.DataSource = Linq1.ToList
این دستور هم مثل دستور قبل هست ولی ما برای کار بروی جدول از شی استفاده می کنیمlinq
من سعی می کنم بعداً بیشتر از سینتکساش بگم ولی الان دیگه فکر کنم خودتون بتونید دستورات معادل اسکیوال رو پیاده کنید.

*همان طور  که دوستان در بخش های قبلی گفتن می تونید با* *For each* *یا* *For* *گزینه ها رو پیمایش کنید*
*شما می تونید* *Store procedure* *رو هم به بخش سمت راست* *Linq class** خودتون اضافه کنید* 
*و بجای اینکه از این سبک* 
*“add_new ‘“+ textbox1.text+”’,’”+textbox2.text”’”*

*از* *Store procedure* *به صورت یک تابع داخلی شی* *linq** استفاده کنید. یعنی :*(دادهای درخاستی این تابع را وارد کنیدLinq.Insert_Customer(
 
اساس کار linq این هست که شما تمام حداولی و procedure هایی رو که بهش معرفی می کنید مثل یک کلاس واقعی با متد های واقعی درون کلاس  خودش نگهداری می کنه و باید به این نکته توجه کنید که اگر در این صورت جدول و پروسیجر شما تغییر ساختاری پیداکنه یعنی فیلدی اضافه یا حذق بشود یا پارامتر اضافه بشود در این صورت باید Linq class خودتون رو refresh کنید تا متد ها و پروسیجر ها هم دوباره با تغییرات جدید ایجاد بشن..

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

سعی می کنم تو مطالب بعدی جبران کنم....

بازم تشکر از سازنده این تاپیک

----------


## mina.net

خوشحالم که تلاشهای من جواب داد و دوستان این را موضوع به صورت جدی تری دنبال می کنند. که این باعث تلاش جدیت بیشتر من در این کار نیز خواهد شد.
در ضمن جناب Roshan2008 مطالب شما فوق العاده بود خواهش می کنم لطف کنید و به ارائه مطالب بیشتر ادامه دهید.
این هم یک فایل pdf در مود linq در  vb
http://www.wrox.com/WileyCDA/WroxTit...470041811.html

----------


## mina.net

سلام دوستان
جناب روشن من کدی را کهگذاشتید را به کار بردم اجرا هم شد ولی سطر دوم این کد برای من نامفهوم بود لطفا توضیح دهید حرف c در این سطر چه معنی دارد


Dim Linq AsNew DataClasses1DataContext
Dim Linq1 = From C In Linq.Customers Select C
DataGrid1.DataSource = Linq1.ToList


موفق باشید

----------


## rooshan2008

سلام
این همون کد "select * from Customer"  تا اینجا که مشکلی فکر نکنم باشه

C یک object  هست که با کلمه in به جدولی که که خواستار فیلتر کردن و اجرای گزارش روی آن هستیم اشاره می کنه
و در انتها حتی برای شما این امکان وجود دارد که  با متغیر C سلولها را فیلتر کنید
 مثلاً:

 
Dim Linq1 = From  C  In NorthwindDataSet.Customers  Where  C.CompanyName  Like TextBox1.Text  + "*"Select  C.Country, C.CustomerID, C.Address
DataGrid1.DataSource = Linq1.ToList
 


با تشکر

 :تشویق:

----------


## rooshan2008

سلام
 این هم کد  مربوط به ایجاد یک سطر جدید 

Dim  Linq1  As New DataClasses1DataContext
Dim  ObjAdd  AsNew  My1  With {.Name = "Mohammad", .Lname = "Roshanfekr", .E_mail = "Program_Vb2006@yahoo.com"}
Linq1.My1s.InsertOnSubmit(ObjAdd)
Linq1.SubmitChanges()
 

من به Linq Calss خودم یه جدول اظافه کردم که 3 تا فیلد داره Name وLnameو E_mail 
اسم جدول من در بانک My1 بوده  .شما نام جدول مورد نظر خود را بکار ببرید.

برای نمایش اطلاعات این جدول :

Dim Linq1  As New  DataClasses1DataContext
Dim View  = From  C  In  Linq1.My1s Where C.Name Like TextBox1.Text + "*"Select C
DataGrid1.DataSource = View.ToList

----------


## odiseh

جناب روشن
شما در مورد ردیف شماره 7 این تاپیک نظری ندارین؟

----------


## Afshin160

سلام ...
يه مطلب خوندم گفتم يايد بدرد شما هم بخوره ...

موفق باشيد 
افشين160

----------


## mina.net

سلام دوستان
در جواب جناب odeson باید بگم من دقیقا نمی دانم منظور شما چی هست ولی می دونم linq بانک اطلاعاتی نیست که برای ان بتونیم indix تعریف کنیم ولی برای اینکه بیشتر در این مورد تحقیق بشه لطفا دقیقتر توضیح بدید و تا با کمک دوستان بشود جواب مناسبی برای ان پیدا کنیم در ضمن بهتر بود چیزهای که خودتان نیز در مورد linq می دانید لااقل قسمتی را در اختیار دوستان قرار می دادید

اما در ادامه مطالب جناب2008 rooshan ایشان دستور select و insert را قرار دادند من هم در ادامه دستور update و delete در linq را می زارم امیدوارم مفید واقع گردد


Private
Sub Uodate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Uodate.Click
 
Dim Linq1 AsNew DataClasses1DataContext
Dim cityNameQuery = From c In Linq1.coustomers Where c.id = TextBox5.Text Select c 
ForEach customer In cityNameQuery
'customer.id = Val(TextBox1.Text)
customer.name = TextBox2.Text
customer.Lname = TextBox3.Text
customer.emall = TextBox4.Text
'If customer.name = TextBox2.Text Then
' customer.name = TextBox3.Text
'End If
Next
Linq1.SubmitChanges()
'äãÇیÔ ãÌÏÏ ÌÏæá
Dim View = From C In Linq1.coustomers Select C.id, C.name, C.Lname, C.emall
DataGridView1.DataSource = View.ToList
end sub 
 



 
PrivateSub Delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Delete.Click 
Dim Linq1 AsNew DataClasses1DataContext
Dim deleteIndivCust = From c In Linq1.coustomers Where c.id = TextBox5.Text Select c 
If deleteIndivCust.Count > 0 Then
Linq1.coustomers.DeleteOnSubmit(deleteIndivCust.Fi  rst)
Linq1.SubmitChanges()
EndIf
'äãÇیÔ ãÌÏÏ ÌÏæá
Dim View = From C In Linq1.coustomers Select C.id, C.name, C.Lname, C.emall
DataGridView1.DataSource = View.ToList
End Sub 
 



اگر نامفهوم بود به مطالب جناب rooshan2008 در همین تاپیک مراجعه کنید چون در ادامه مطالب ایشون می باشد.


امیدوارم مفید باشد

----------


## shahab_ss

MyDataClassesDataContext m_obj = new MyDataClassesDataContext();
            var m_query = from c in m_obj.tblPersonels
                          where c.IsActive == true
                          select new
                              {
                                  Name = c.PName,
                                  ID = c.ID

                              };


            this.comboBox1.DataSource = m_query;
            this.comboBox1.DisplayMember = "Name";
            this.comboBox1.ValueMember = "ID";


نمونه ای برای پر کردن یک کمبو باکس توسط لینک

----------


## visual_sadegh

من توی استفاده از لینکیو مشکل پیدا کردم
هنگامی که از این کد استفاده می کنم بجای دیدن رشته ها طول رشته رو توی دیتاگرید نشون می ده ممکنه منو راهنمایی کنید؟
      Dim A() As String = {"شنبه", "یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه"}
        Dim D = From T In A Select T
        Me.DataGridView1.DataSource = D.ToList

----------


## rooshan2008

سلام
به مشکل به این خاطر هست که شما آرایه ای را به دیتاسورس انتصاب داده اید و چون شی که به دیتاسورس انتصاب داده می شود باید شامل headerو یا Column یا سربرگ باشد تا سربرگ آن نیز نمایش داده شود
راه حل: شما با یک حلق for each نتیجه دستور Linq را خوانده و در Datagridview نمایش دهید.

راه دوم:یا اطلاعات را داخل یک datatable سازمان دهی کرده و بعد نمایش دهید:

Dim DTable  AsNew  DataTable
Dim A() As String = {"شنبه", "یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه
DTable.Columns.Add("Value")
For i = 0  To  A.Count - 1
DTable.Rows.Add()
DTable.Rows(i).Item(0) = A(i)
Next
Dim D = From  T  In  DTable  Select  T
Me.DataGridView1.DataSource = D.asdataView
 
راه های دیگر هم وجود داره...من کد بالا رو اجرا نکردم ولی فکر کنم دست نوشته باشم

----------


## visual_sadegh

> ه مشکل به این خاطر هست که شما آرایه ای را به دیتاسورس انتصاب داده اید و چون شی که به دیتاسورس انتصاب داده می شود باید شامل headerو یا Column یا سربرگ باشد تا سربرگ آن نیز نمایش داده شود


ممنون از راهنمایی تون ولی من آرایه رو به دیتاسورس نسبت ندادم
اگه توجه کنید خروجی متغیر D هست که اون هم به دیتالیست تبدیل می شه
ولی چیزی که دستگیرم شد تنها property متغیر string طولشه( Length)
فکر می کنم اگه بجز این خصوصیت خصوصیت دیگه ای داشت حتما اونو هم نشون می داد.
ممنون

----------


## mina.net

جناب visual_sadegh فکر می کنم مشکل شما همان طور که جناب roshan گفتند با حلقه for حل شود 

نحوه انجام این کار نیز در همین تاپیک چند بار گفته شد

----------


## منصور بزرگمهر

کدها فقط در 2008 اجرا می شود

----------


## مرتضی حمزه ئی

با سلام خدمت دوستان وتشکر از بابت راه انداختن موضوعی که بسیار جدید است 
من یک dll میخوام بسازم که دستورات insert,update,delete,select آن با استفاده از دستورات linq باشه ونام هر فایل داخل linq متغیر بهش ارسال بشه دستورات select و delete بنظر قابل انجام هست چون در دستور 
From c In Linq.PERSONELs Select c  شاید بشه بجای پرسنل یک نام فایل دیگه قرار بگیره و select c آخر نیز بنظر میشه پارامتری باشه البته c آخرش که میشه دستور delete و select را روی آن استفاده کرد حالا حداقل دو دستور delete و select را اگه بخواهیم پارامتری کنیم چطوری شروع کنیم ولی در مورد insert,update بنظر میاد نشه چون نام فیلدهای هرفایل را بترتیب با مقداری که میخوام ارسال کنیم که بنظر سخت میاد دوستان من پیشنهاد میکنم که این را شروع کنیم که یک dll بشه که در اختیار همه قرار بگیره 
عزیزان ببخشید گستاخی کردم ولی بنظرم اگه بشه این dll را شاخت بدرد خیلی ها میخوره
من خودم شروع کردم ولی هنوز به نتیجه نرسیدم
  باتشکر از دوستان

----------


## مرتضی حمزه ئی

با سلام خدمت دوستان
یک سوال دارم از دوستان بالاخص آقای روشن چون اولین بار مطلب اتصال به یک دیتابیس برای linq را ایشون نمایش داد 
سوالم اینه که وقتی ما داریم از طریق کلاس Linq to sql class  یک DataClasses1DataContext تعریف میکنیم وفایلها را دراگ میکنیم چطوری از دستوری  داخل یک حلقه استفاده کنیم که بتونه تمام فایلها را نامهاش را پیدا کنه وداخل این  DataClasses1DataContext اضافه کنه تا بعداز این دستور به تمام فایلهای داخل این دیتابیس از طریق linq دسترسی داشته باشیم 

ممنون میشم کمک کنید

----------


## rooshan2008

سلام
این کار رو میشه انجام داد ولی :
شما به تابع یا رویه مورد نظر که می خواد Select یا Delet انجام بده یک دیتا تیبل یا dataset ارصال کنی .تا به این صورت دینامیک بشه.
2-وقتی شما چیزی رو داخل Linq Class دراگ می کنید به صورت خود کار تمام متد ها و پروپرتی ها رو ایجاد می کنه و مقدارها و تمام ارتباط ها رو برقرار می کنه به فرض مثال جدول Customer رو من به داخل linq class دراگ می کنم کدی که به صورت خودکار ایجاد می کنه این هست::


<Table(Name:=
"dbo.Customers")> _
Partial

PublicClass Customer
Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged 
PrivateShared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) 
Private _CustomerID AsString 
Private _CompanyName AsString 
Private _ContactName AsString 
Private _ContactTitle AsString 
Private _Address AsString 
Private _City AsString 
Private _Region AsString 
Private _PostalCode AsString 
Private _Country AsString 
Private _Phone AsString 
Private _Fax AsString 
PublicSubNew()
MyBase.New
OnCreated
EndSub 
<Column(Storage:=

"_CustomerID", DbType:="NChar(5) NOT NULL", CanBeNull:=false, IsPrimaryKey:=true)> _
PublicProperty CustomerID() AsString
Get
ReturnMe._CustomerID
EndGet
Set
If (String.Equals(Me._CustomerID, value) = false) Then
Me.OnCustomerIDChanging(value)
Me.SendPropertyChanging
Me._CustomerID = value
Me.SendPropertyChanged("CustomerID")
Me.OnCustomerIDChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_CompanyName", DbType:="NVarChar(40) NOT NULL", CanBeNull:=false)> _
PublicProperty CompanyName() AsString
Get
ReturnMe._CompanyName
EndGet
Set
If (String.Equals(Me._CompanyName, value) = false) Then
Me.OnCompanyNameChanging(value)
Me.SendPropertyChanging
Me._CompanyName = value
Me.SendPropertyChanged("CompanyName")
Me.OnCompanyNameChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_ContactName", DbType:="NVarChar(30)")> _
PublicProperty ContactName() AsString
Get
ReturnMe._ContactName
EndGet
Set
If (String.Equals(Me._ContactName, value) = false) Then
Me.OnContactNameChanging(value)
Me.SendPropertyChanging
Me._ContactName = value
Me.SendPropertyChanged("ContactName")
Me.OnContactNameChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_ContactTitle", DbType:="NVarChar(30)")> _
PublicProperty ContactTitle() AsString
Get
ReturnMe._ContactTitle
EndGet
Set
If (String.Equals(Me._ContactTitle, value) = false) Then
Me.OnContactTitleChanging(value)
Me.SendPropertyChanging
Me._ContactTitle = value
Me.SendPropertyChanged("ContactTitle")
Me.OnContactTitleChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_Address", DbType:="NVarChar(60)")> _
PublicProperty Address() AsString
Get
ReturnMe._Address
EndGet
Set
If (String.Equals(Me._Address, value) = false) Then
Me.OnAddressChanging(value)
Me.SendPropertyChanging
Me._Address = value
Me.SendPropertyChanged("Address")
Me.OnAddressChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_City", DbType:="NVarChar(15)")> _
PublicProperty City() AsString
Get
ReturnMe._City
EndGet
Set
If (String.Equals(Me._City, value) = false) Then
Me.OnCityChanging(value)
Me.SendPropertyChanging
Me._City = value
Me.SendPropertyChanged("City")
Me.OnCityChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_Region", DbType:="NVarChar(15)")> _
PublicProperty Region() AsString
Get
ReturnMe._Region
EndGet
Set
If (String.Equals(Me._Region, value) = false) Then
Me.OnRegionChanging(value)
Me.SendPropertyChanging
Me._Region = value
Me.SendPropertyChanged("Region")
Me.OnRegionChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_PostalCode", DbType:="NVarChar(10)")> _
PublicProperty PostalCode() AsString
Get
ReturnMe._PostalCode
EndGet
Set
If (String.Equals(Me._PostalCode, value) = false) Then
Me.OnPostalCodeChanging(value)
Me.SendPropertyChanging
Me._PostalCode = value
Me.SendPropertyChanged("PostalCode")
Me.OnPostalCodeChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_Country", DbType:="NVarChar(15)")> _
PublicProperty Country() AsString
Get
ReturnMe._Country
EndGet
Set
If (String.Equals(Me._Country, value) = false) Then
Me.OnCountryChanging(value)
Me.SendPropertyChanging
Me._Country = value
Me.SendPropertyChanged("Country")
Me.OnCountryChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_Phone", DbType:="NVarChar(24)")> _
PublicProperty Phone() AsString
Get
ReturnMe._Phone
EndGet
Set
If (String.Equals(Me._Phone, value) = false) Then
Me.OnPhoneChanging(value)
Me.SendPropertyChanging
Me._Phone = value
Me.SendPropertyChanged("Phone")
Me.OnPhoneChanged
EndIf
EndSet
EndProperty 
<Column(Storage:=

"_Fax", DbType:="NVarChar(24)")> _
PublicProperty Fax() AsString
Get
ReturnMe._Fax
EndGet
Set
If (String.Equals(Me._Fax, value) = false) Then
Me.OnFaxChanging(value)
Me.SendPropertyChanging
Me._Fax = value
Me.SendPropertyChanged("Fax")
Me.OnFaxChanged
EndIf
EndSet
EndProperty 
PublicEvent PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.Prop  ertyChanging 
PublicEvent PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.Prope  rtyChanged 
ProtectedOverridableSub SendPropertyChanging()
If ((Me.PropertyChangingEvent IsNothing) _
= 

false) Then
RaiseEvent PropertyChanging(Me, emptyChangingEventArgs)
EndIf
EndSub 
ProtectedOverridableSub SendPropertyChanged(ByVal propertyName As [String])
If ((Me.PropertyChangedEvent IsNothing) _
= 

false) Then
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
EndIf
EndSub
End

Class

 
 
فکر کنم از راه Codedom هم بشه 

من این پیشنهاد رو می کنم برای اینکه دینامک بشه بهتر اینکار رو کنی وقتی اسم جدولی از بانک برات ارسال میشه اول اطلاعات داخل بانک رو با sql دربیار وداخل datatableبریز بعد حالا از این به بعد دستور Linq رو روی DataTable اجرا کن و نتیجه رو برگشت بده.

راستی این فقط یه پیشنهاد بود سو تفاهم پیش نیاد.. :تشویق:

----------


## مرتضی حمزه ئی

با سلام خدمت دوستان
چند تا نکته توی جستجوهام بهش دست پیدا کردم واسه دوستان قرار میدم
1- داخل دستور linq میشه از order by استفاده کرد مثال
   Dim titlesAscendingPrice = From b In Books  order By b.Price
   2- میشه دااخل دستور برای برگردوندن چند تا رکورد از دستور زیر استفاده میکنیم
                                                     Dim customerList = From cust In customers   Take 10                        
که 10 رکورد اول را برمیگردونه
3- اگه بخواهیم چند تارکورد اول رابیخیال بشیم و از یک نقطه به بعد رکوردها رابرگردونیم از دستور زیر استفاده میکنیم

                  Dim customerList = From cust In customers   Skip 10
4- برای اینکه دوتا مجموعه جواب را ترکیب کنیم از دستور union استفاده میکنیم 
                                                      Dim customers1 = From cust In domesticCustomers
                                                   Dim customers2 = From cust In internationalCustomers
                                                        (Dim customerList = customers1.Union(customers2
                                                                                      () Return customerList.ToList

  باعث میشه کل جوابهای دوجدول را داخل customerlist قرار بده
امیدوارم مفید باشه بعدا در صورت استقبال مطالب دیگه هم اضافه میکنم

4

----------


## mina.net

سلام دوستان 
فکر می کنم به اندازه کافی در مورد مفاهیم اولیه linq بحث شد و باید به مباحث بیشرفته تر پرداخت 
مثلا چطور یک دستور select تو در تو نوشت
و مشابه ان

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

----------


## mina.net

سلام دوستان
یک برنامه حاوی تعداد زیادی QOURY را برای تان گذاشتم امیدوارم مفید واقع شود

منتظر برنامه بعدی حاوی مطالبی در مورد LINQ TO SQL باشید

----------


## mina.net

سلام دوستان 
همان طوری که قول داده بودم یک نمونه برنامه از linq to sql  برای شما عزیزان در زیر قرار دادم امیدوارم مفید واقع شود

----------


## mina.net

سلام دوستان 
من به علت مشکلاتی طی چند روز اخیر داشتم نتوانستم مطلب جدیدی برای شما قرار بدم 
مباحث لینکیو ادامه دارد لطفا ادامه بدید . 
به نظرم linq to xml و linq to sql مباحث خوبی برای ادامه بحث باشد.
امیدوارم دوستان خسته نشده باشند.

----------


## linux

> سلام دوستان 
> من به علت مشکلاتی طی چند روز اخیر داشتم نتوانستم مطلب جدیدی برای شما قرار بدم 
> مباحث لینکیو ادامه دارد لطفا ادامه بدید . 
> به نظرم linq to xml و linq to sql مباحث خوبی برای ادامه بحث باشد.
> امیدوارم دوستان خسته نشده باشند.


 با توجه به اینکه ممکن LINQ to SQL در آینده توسعه داده نشه و یا کنار گذاشته بشه خیلی روش سرمایه گذاری نکنید ، بجاش از linq to entity استفاده کنید.

----------


## mina.net

> با توجه به اینکه ممکن LINQ to SQL در آینده توسعه داده نشه و یا کنار گذاشته بشه خیلی روش سرمایه گذاری نکنید ، بجاش از linq to entity استفاده کنید.


[quote=mina.net;647805]
سلام دوستان 
جناب linux من هم با شما موافقم و می دانم که linq اخر برنامه نویسی نیست و دوستان فکر نکنن صرفا باlinq همه مشکلاتشان حل خواهد شد . به نظر من مهمترین عیب linq to sqlو ado .net این است که برنامه نویسان بخصوص افرادی که در مسیر یادگیری هستند را به علت سادگی کاری که دارد از فراگیری موضوعات پیشرفته تر که نیاز به ممارست بیشتر دارد باز می دارد . جناب linux از یاداوری شما بسیار سپاس گذارم . از linq به اندازه خودش انتظار داشته باشید.در ضمن در مورد linq to entity کمی توضیح بدید.
موفق باشید.

----------


## mina.net

سلام دوستان 
مدتی به اینترنت دسترسی نداشتم به نظر می رسد دوستان مبحثی که در LINQ شروع کردیم را رها کردند خواهش می کنم . 
لطفا دوستان مبحث LINQ  را جدی تر دنبال کنید.

----------


## Sajjad1364

با سلام خدمت تمامی دوستان.مطرح کردن این بحث با این تعداد کم استقبال واقعا جای تعجب دارد.از دوستان انتظار دارم که در این بحث با جدیت بیشتری ادامه دهنده و پیگیر مطالب باشند.
LINQ انقلابی در زمینه کدنویسی میباشد.این زبان هرچند ، بیشتر در رابطه با SQL  قدرتمند است ، اما حقیقت امر آنست که LINQ در تمامی مراحل حل هر مساله ای که پردازشی روی داده های منظم انجام میگیرد دخیل است. Lambda Expression عنصری است که تحت عنوان متدهایی با فرمت خاص جدای از تعریف های ارائه شده برای متدهای متداول میباشند که دارای کاربردهای سریع و خاص در جهت استفاده بهینه از شکل انکپسوله شده LINQ  هستند.
هرچند LINQ در زمینه کار با پایگاه داده ها بیشتر مورد توجه قرار میگیرد ، اما عناصر دیگر دات نت نظیرژنریک ها ، آرایه ها ، لیست ها و.... LINQ  را در خود توسط Lambda Expression و Delegate ها انکپسوله کرده اند.از طرفی Delegate ها هم در جهت خدمت به زبان یکپارچه سازی داده ها توسعه داده شده است. تقریبا هر آنچه که در سی شارپ 2 نقطه قدرت بود و هر آنچه که زبانهای مبتنی بر پلت فرم دات نت را بر زبانهای دیگر برتری می داد به شکل مستقیم و یا غیر مستقیم در حال توسعه فقط بخاطر LINQ هستند.پس پس پس  LINQ در آینده با قدرت بیشتری و با در اختیار گرفتن نحو سی شارپ و نهادینه کردن خود ، قدرت خودرا به نمایش میگذارد.
همانطور که دوستان عزیز هم میدانند پرس وجوهایی که توسط LINQ  بدون تبدیل صریح از سوی برنامه نویس اخذ میشود دارای نوعی که مورد انتظار است نمیباشند

مثلا به کد زیر توجه کنید:

 struct Student
        {
            int grade;
            public int Grade
            {
                get { return grade; }
                set { grade = value; }
            }

            string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }

            string family;
            public string Family
            {
                get { return family; }
                set { family = value; }
            }
        }
        static void Main(string[] args)
        {
            getStudents();
        }
        private static void getStudents()
        {
            Student[] allstudents = new Student[]
            {
                new Student(){ Name="Ali", Family="Amiri", Grade=19},
                new Student() { Name="Sajjad", Family="Shirzadee", Grade=20},
                new Student() { Name="Amir", Family="Hasani", Grade=18},
                new Student() { Name="Amini", Family="Amini", Grade=13},
                new Student() { Name="Reza", Family="Taheri", Grade=12},
                new Student() { Name="Mohammad", Family="Shirazee", Grade=9},
            };
            var students = from d in allstudents
                    where d.Grade > 13
                    select new { d.Name, d.Family };
        }
    }
در این نمونه کد Structs ی به نام Student تعریف شده است که شامل فیلدهای نام، فامیلی و نمره می باشد .کاری که متد getStudents انجام میدهد آن است که دانش آموزانی را در آرایه ای ایجاد میکند و فیلدهای آنها را ست میکند. سپس پرس و جویی را برای گرفتن نام و فامیلی دانش آموزانی که نمره آنها بالاتر از 13 میباشد ایجاد میکنیم.حال  اگر بخواهیم نمیتوانیم  students  را بازگشت بدهیم.چرا که نوع بازگشتی متدها را نمیتوان از نوع var تعریف کرد.اما در نسخه بعدی سی شارپ و وی بی این انتظار برآورده شده است و شما میتوانید نوع بازگشتی یک متد را حتی var تعریف کنید.این تغییر و تحولات نشان میدهند که مایکروسافت نگاه ویژه ای به *LINQ*  دارد.
پس از  این تعاریف (هر چند کم) که ارائه شد ، چیزی که بزرگترین مزیت LINQ است و به چشم هم نمی آید خیال راحت برنامه نویس در کار نکردن با کلمه *Sql* است.با این تفاسیر ، نگاه جدید توسعه دهندگان دات نت به مقوله پایگاه داده و وجود زیر ساخت مناسبی مانند LINQ  زمینه تبدیل کار با پایگاه داده ها که از غیر شیء گراترین عناصر موجود در دات نت محسوب میشوند را به OR Mapping  یا (نگاشت رابطه ای شیئ) تبدیل کرده است.در پس پرده توسط  Entity Class میتوان با یک دیتابیس به مثابه آرایه ای از داده ها رفتار کرد.اینک LINQ با Entity Class ها ترکیب قدرتمندی تشکیل میدهند که میتوان از آنها برای اعتلای کدهای خود استفاده کرد.
یکی از نکاتی که بایستی به آن اشاره نمود این است که وقتی مثلا یک Entity Class  را به دیتاگرید متصل میکنید  مشکلی پیش نمی آید ، اما وقتی نتیجه پرس و جویی که یک نوع بدون نام است را به دیتا گرید متصل میکنید.مشکلی که پیش می آید این است که دیتا گرید آنقدر با هوش نیست که بتواند Property های موجود در آن نوع را تشخیص بدهد چرا که مکانیزم انجام این کار در دیتاگرید قرارداده نشده است.از آنجا که اشیایی که اینترفیس IList ویا IEnumerator ویا IBindingList را پیاده سازی میکنند ، میتوانند به دیتاگرید متصل شوند، پس  حتی یک رشته را هم میتوان به دیتاگرید وصل کرد.اما داده ای نمایش داده نمیشود .
با این محدودیت خود ما باید جواب را هرچه بیشتر به IList ویا IBindingList نزدیک کنیم . یعنی به شکلی نوع بی نامی که حاصل از پرس وجو مییاشد را تبدیل کنیم .بنظر می آید برای رسیدن به این منظور باید از متد ()students.ToList استفاده کنیم.در اینصورت اگر یک دیتاگرید داشته باشیم 
میتوانیم از این متد برای نسبت دادن داده ها به دیتاگرید استفاده کنیم.

نکته بعد : 
واما Select های تودر تو به یک سری فرضیات احتیاج داریم   خوب دقت کنید:
Grade:آرایه ای از اعداد اعشاری است که نمرات دانش آموز در آن ذخیره میشود.
و این کد مقداردهی اولیه تعدادی از دانش آموزان میباشد.
کد:

Student[] allstudents = new Student[]
            {
                new Student()
                { 
                    Name="Ali", Family="Amiri",
                    City="Kermanshah",Grade=new double[]{10,12,15,18,20}
                },
                new Student() 
                { 
                    Name="Sajjad", Family="Shirzadee", 
                    City="Tabriz",Grade=new double[]{9,6,14,13,20}
                },
                new Student() 
                { 
                    Name="Amir", Family="Hasani",
                    City="Kermanshah", Grade=new double[]{20,17,9 ,16,19}
                },
                new Student() 
                { 
                    Name="Amini", Family="Amini", 
                    City="Mashhad", Grade=new double[]{5 ,10,11,12,20}
                },
                new Student()
                { 
                    Name="Reza", Family="Taheri", 
                    City="Esfahan",Grade=new double[]{13,11,7 ,14,14}
                },
                new Student()
                {
                    Name="Mohammad", Family="Shirazee",
                    City="Kerman", Grade=new double[]{10,12,15,18,20}
                }
            };

حالا اسم دانش آموزانی که اهل کرمانشاه هستند و معدل آنها بالای 15 میباشد را در دیتا گرید نمایش میدهیم :

کد:

var students = from d in
                               (from st in allstudents
                                where st.City == "Kermanshah"
                                select new { st.Name, Average = st.Grade.Sum() / st.Grade.Length })
                           where d.Average > 15
                           select new { d.Name };
            this.dataGridView1.DataSource = students.ToList();

توضیح :

select درونی اسم ومعدل دانش آموزانی را در غالب نوع بدون نام به d نسبت میدهد و where
دوم نتایج را فیلتر میکند ودر قسمت آخر هم نام را از d برمیداریم
آخرین خط هم نتیجه را به لیست تبدیل و به دیتاگرید میدهیم.
*منزه است دانای نیاموخته*

----------


## roya1987

سلام
لطفا" کمک
دستور ی می خوام که ID آخرین رکورد که در جدول ثبت شده بده

----------


## shahab308

> سلام
> لطفا" کمک
> دستور ی می خوام که ID آخرین رکورد که در جدول ثبت شده بده


 
دوست عزیز شما می تونید از کد زیر برای این کار استفاده کنید 
1 - باید یه شی جدید از کلاس datacontext  ایجاد کنی که ما فرض رو بر این میگیریم که شی ایجاد شده دارای نام Dc  می باشد 
2 -
 decimal id =(dc.ExecuteQuery<decimal>("SELECT IDENT_CURRENT ('Table Name') AS Current_Identity")).ToList()[0];
3 - به جای tablename اسم جدولی رو بزار که میخوای آخرین ID شو در بیاری

----------


## microland

با سلام خدمت دوستان گرامی
اگر ممکنه در مورد پیمایش رکورد ها با استفاده از linq کمی توضیح دهید
مثلا چگونه میشه در برنامه دو کلید به نام های movenext  و moveprevious گذاشت که با کلیک بر روی اینها بتوان به رکورد قبلی یا بعدی رفت و مقادیر آنها در TextBox نمایش داده شود

مرسی از لطف همگیتون

----------


## raziee

> مثلا چگونه میشه در برنامه دو کلید به نام های movenext و moveprevious گذاشت که با کلیک بر روی اینها بتوان به رکورد قبلی یا بعدی رفت و مقادیر آنها در TextBox نمایش داده شود


لینک زیر رو نگاه بفرمایید.
http://www.barnamenevis.org/sh...d.php?t=196548
میتونه کمکون کنه.
این لیک هم هست:
https://barnamenevis.org/showpo...8&postcount=20

----------


## fateme65

اینو توی یه وبلاگ دیدم . به نظرم جالب اومد :
-           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 در لایه بندی را عنوان خواهم کرد.

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

----------


## ابراهیم1

با سلام به همگی
ابتدا از تمام فایلهایی که در مورد linq گذاشتید از شما تشکر می کنم من برای پروژه پایانی دارم با linq کار میکنم ولی من نمیتونم با linq 3 عمل پشتیبان گیری و بازگردانی پشتیبان و گزارشگیری را انجام بدم از شما خواهش و تقاضا دارم در این 3 زمینه اگر فایلی یا کدی دارید که به من کمک میکند  اینجا بزارید خیلی لازمش دارم  خواهشا اگر فایل دارید به ایمیلم ارسال کنید یااینجا بزارید  اینم ایمیلم
ramzani.ebrahim@yahoo.com

----------


## PirouzNZ

سلام به مهندسان عزیز 
من می خوام توسط دستورات linq از پایگاه داده ی خودم backup بگیرم  در صورت امکان منو راهنمایی کنید خیلی خیلی ممنون

----------


## MOR_MS

با سلام
 من دو تا جدول دارم  جدول  A  و جدول B  در A تعدادي ركورد ثبت شده كه با جدول B  يك رابطه يك به چند دارد مي خوام با استفاده از linq يك كوري بگيرم كه فيلد (مبلغ) را در جدول B   برا ي هر ركورد متناظر جدول A  جمع بزنه و در كوري نشان دهد
 فكر كنم اول بايد جدول B گروه بندي كنم اگه ميشه به زبان vb  برام درست كنين  ممنون ميشم

----------


## HAMRAHSOFT.IR

جستجو بین دو تاریخ در linqبه چه صورت است امکان داره دوستان بکنمونه قرار بدن یا توضیح بدن

----------


## MOR_MS

> با سلام
>  من دو تا جدول دارم  جدول  A  و جدول B  در A تعدادي ركورد ثبت شده كه با جدول B  يك رابطه يك به چند دارد مي خوام با استفاده از linq يك كوري بگيرم كه فيلد (مبلغ) را در جدول B   برا ي هر ركورد متناظر جدول A  جمع بزنه و در كوري نشان دهد
>  فكر كنم اول بايد جدول B گروه بندي كنم اگه ميشه به زبان vb  برام درست كنين  ممنون ميشم


 تشكر از زحماتتون پاسخ را بدست اوردم  :لبخند گشاده!:

----------


## HAMRAHSOFT.IR

جستجو بین دو تاریخ در linqبه چه صورت است امکان داره دوستان بکنمونه قرار بدن یا توضیح بدن؟
دوستان کسی کار نکرده؟

----------


## samane.t

سلام
من میخوام نام جدول رو به صورت پارامتری بفرستم و اگر اون جدول وجود داشت کاری که میخوام رو انجام بده 
تا اینجا تونستم که نام رو پاس بدم و کاری که میخوام رو انجام بدم ، اما این فقط برای جداولی که وجود دارند درست کار میکنه و اگه نام جدولی رو که میخوام هنوز ساخته نشده باشه و وجود نداشته باشه ارور میده که invalid object name..
کسی هست بتونه راهنمایی کنه؟ ممنونم میشم
 string tsql = string.Format(
                               "SELECT Clock_BDate, ltrim(rtrim( str(Clock_BTime / 60))) + ':' +ltrim(rtrim( Str(Clock_BTime % 60))) as Hour,Clock_BTime FROM [{0}]",
                                 NameOfTable);

               var qryExecOperations = utility.getDataContext.ExecuteQuery<operationHour>  (tsql).ToList();

----------

