PDA

View Full Version : اگر علاقه ای به LINQ دارید وارد شوید



mina.net
شنبه 18 آبان 1387, 08:22 صبح
سلام دوستان
من خوئم چیز زیادی در باره 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
شنبه 18 آبان 1387, 08:29 صبح
سلام دوستان
من خوئم چیز زیادی در باره 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 بنویسید و نتیجه ان را ببینید.
به یاد داشته باشید این فقط یک نمونه ساده است.


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

odiseh
شنبه 18 آبان 1387, 09:48 صبح
ممنون از اینکه ای تاپیک رو ایجاد کردید،
اگه میشه در مورد متغیر evensQuery توضیح بدین. این مقداری که گرفته چیه و به چه زبایه؟

mostafaaa
شنبه 18 آبان 1387, 10:19 صبح
سلام
البته من در مورد 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
یک شنبه 19 آبان 1387, 08:27 صبح
سلام
از دوست خوبم 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
دوشنبه 20 آبان 1387, 08:58 صبح
سلام دوستان
انتظار بیشتر از دوستان برای همفکری در ضمینه 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
دوشنبه 20 آبان 1387, 11:30 صبح
سلام Mina.NET
من یه سوال داشتم. ما توی SQL می تونیم برای جداولمون Index تعریف کنیم اما اینجا اگه Query هامن رو با Linq بنویسیم، چطوری سرعت اجرای اونا رو بهینه کنیم؟
در ضمن، ظاهرا دو روش برای نوشتن Query وجود داره. یکی expression و یکی هم method.
اون روش method سختتر هستش. اگه میشه راجع به اون توضیحاتی رو بنویسین.

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

rooshan2008
دوشنبه 20 آبان 1387, 12:35 عصر
سلام
به همه دوستان بخصوص 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 C


DataGrid1.DataSource = Linq1.ToList
-به جا هایی که قرمز شده توجه کنید (پرسپولیس) منظور همون دیتاستی هست که شما تو قسمت قبل درست کرده بودین و روی فرم خودتون گزاشته بودین.
-جایی هم که سبز شده منظور همون textbox هست که شما می خواهید بر اساس اون جدول رو فیلتر می کنید.
جایی هم که رنگ زرد شده منظور این هست که نتیجه فیلتر رو به صورت لیست در آورده و اون رو به عنوان dataSource به dataGrid انتصاب بده

روش دوم : که من خیلی تو پروژه هام ازش استفاده می کنم البته تا حالا یک با فقط پروژه بزرگ انجام داده و حدود 5/1 هست که روش داریم کار می کنیم:قهقهه:(البته خیلی بزرگ هست خیلی خیلی)
یه پروژه جدید Windows Apliction جدید باز کنید .
از منوی project گزینه Add new items رو بزنید از کادر باز شده سمت چپ data رو انتخاب کنید و بعد از گزینه هایی که در سمت راست ظاهر می شوند Linq to Sql Classes رو انتخاب کنید و Add ؤو بزنید.
بعد مثل شکل پایین:




http://tinypic.info/files/47sezlekikwruzzwbjym.jpg




Dim Linq As New 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
سه شنبه 21 آبان 1387, 17:41 عصر
خوشحالم که تلاشهای من جواب داد و دوستان این را موضوع به صورت جدی تری دنبال می کنند. که این باعث تلاش جدیت بیشتر من در این کار نیز خواهد شد.
در ضمن جناب Roshan2008 مطالب شما فوق العاده بود خواهش می کنم لطف کنید و به ارائه مطالب بیشتر ادامه دهید.
این هم یک فایل pdf در مود linq در vb
http://www.wrox.com/WileyCDA/WroxTitle/Professional-LINQ.productCd-0470041811.html

mina.net
سه شنبه 21 آبان 1387, 17:50 عصر
سلام دوستان
جناب روشن من کدی را کهگذاشتید را به کار بردم اجرا هم شد ولی سطر دوم این کد برای من نامفهوم بود لطفا توضیح دهید حرف c در این سطر چه معنی دارد



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


موفق باشید

rooshan2008
سه شنبه 21 آبان 1387, 21:05 عصر
سلام
این همون کد "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
سه شنبه 21 آبان 1387, 22:43 عصر
سلام
این هم کد مربوط به ایجاد یک سطر جدید



Dim Linq1 As New DataClasses1DataContext
Dim ObjAdd As New 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
چهارشنبه 22 آبان 1387, 08:57 صبح
جناب روشن
شما در مورد ردیف شماره 7 این تاپیک نظری ندارین؟

Afshin160
چهارشنبه 22 آبان 1387, 15:18 عصر
سلام ...
يه مطلب خوندم گفتم يايد بدرد شما هم بخوره ...

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

mina.net
پنج شنبه 23 آبان 1387, 09:39 صبح
سلام دوستان
در جواب جناب 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
جمعه 24 آبان 1387, 18:33 عصر
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
شنبه 25 آبان 1387, 10:36 صبح
من توی استفاده از لینکیو مشکل پیدا کردم
هنگامی که از این کد استفاده می کنم بجای دیدن رشته ها طول رشته رو توی دیتاگرید نشون می ده ممکنه منو راهنمایی کنید؟

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

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

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



Dim DTable As New 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
یک شنبه 26 آبان 1387, 07:57 صبح
ه مشکل به این خاطر هست که شما آرایه ای را به دیتاسورس انتصاب داده اید و چون شی که به دیتاسورس انتصاب داده می شود باید شامل headerو یا Column یا سربرگ باشد تا سربرگ آن نیز نمایش داده شود
ممنون از راهنمایی تون ولی من آرایه رو به دیتاسورس نسبت ندادم
اگه توجه کنید خروجی متغیر D هست که اون هم به دیتالیست تبدیل می شه
ولی چیزی که دستگیرم شد تنها property متغیر string طولشه( Length)
فکر می کنم اگه بجز این خصوصیت خصوصیت دیگه ای داشت حتما اونو هم نشون می داد.
ممنون

mina.net
یک شنبه 26 آبان 1387, 14:32 عصر
جناب visual_sadegh فکر می کنم مشکل شما همان طور که جناب roshan گفتند با حلقه for حل شود

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

منصور بزرگمهر
یک شنبه 26 آبان 1387, 17:38 عصر
کدها فقط در 2008 اجرا می شود

مرتضی حمزه ئی
دوشنبه 27 آبان 1387, 09:51 صبح
با سلام خدمت دوستان وتشکر از بابت راه انداختن موضوعی که بسیار جدید است
من یک 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 را شاخت بدرد خیلی ها میخوره
من خودم شروع کردم ولی هنوز به نتیجه نرسیدم
باتشکر از دوستان

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

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

rooshan2008
دوشنبه 27 آبان 1387, 12:13 عصر
سلام
این کار رو میشه انجام داد ولی :
شما به تابع یا رویه مورد نظر که می خواد 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 اجرا کن و نتیجه رو برگشت بده.

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

مرتضی حمزه ئی
سه شنبه 28 آبان 1387, 09:12 صبح
با سلام خدمت دوستان
چند تا نکته توی جستجوهام بهش دست پیدا کردم واسه دوستان قرار میدم
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
سه شنبه 28 آبان 1387, 13:08 عصر
سلام دوستان
فکر می کنم به اندازه کافی در مورد مفاهیم اولیه linq بحث شد و باید به مباحث بیشرفته تر پرداخت
مثلا چطور یک دستور select تو در تو نوشت
و مشابه ان

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

mina.net
پنج شنبه 30 آبان 1387, 08:22 صبح
سلام دوستان
یک برنامه حاوی تعداد زیادی QOURY را برای تان گذاشتم امیدوارم مفید واقع شود

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

mina.net
چهارشنبه 06 آذر 1387, 08:53 صبح
سلام دوستان
همان طوری که قول داده بودم یک نمونه برنامه از linq to sql برای شما عزیزان در زیر قرار دادم امیدوارم مفید واقع شود

mina.net
یک شنبه 17 آذر 1387, 12:03 عصر
سلام دوستان
من به علت مشکلاتی طی چند روز اخیر داشتم نتوانستم مطلب جدیدی برای شما قرار بدم
مباحث لینکیو ادامه دارد لطفا ادامه بدید .
به نظرم linq to xml و linq to sql مباحث خوبی برای ادامه بحث باشد.
امیدوارم دوستان خسته نشده باشند.

linux
یک شنبه 17 آذر 1387, 13:10 عصر
سلام دوستان
من به علت مشکلاتی طی چند روز اخیر داشتم نتوانستم مطلب جدیدی برای شما قرار بدم
مباحث لینکیو ادامه دارد لطفا ادامه بدید .
به نظرم linq to xml و linq to sql مباحث خوبی برای ادامه بحث باشد.
امیدوارم دوستان خسته نشده باشند.
با توجه به اینکه ممکن LINQ to SQL در آینده توسعه داده نشه و یا کنار گذاشته بشه خیلی روش سرمایه گذاری نکنید ، بجاش از linq to entity استفاده کنید.

mina.net
پنج شنبه 21 آذر 1387, 08:55 صبح
با توجه به اینکه ممکن 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
شنبه 28 دی 1387, 18:02 عصر
سلام دوستان
مدتی به اینترنت دسترسی نداشتم به نظر می رسد دوستان مبحثی که در LINQ شروع کردیم را رها کردند خواهش می کنم .
لطفا دوستان مبحث LINQ را جدی تر دنبال کنید.

Sajjad1364
چهارشنبه 02 بهمن 1387, 20:10 عصر
با سلام خدمت تمامی دوستان.

مطرح کردن این بحث با این تعداد کم استقبال واقعا جای تعجب دارد.از دوستان انتظار دارم که در این بحث با جدیت بیشتری ادامه دهنده و پیگیر مطالب باشند.
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
سه شنبه 03 آذر 1388, 16:43 عصر
سلام
لطفا" کمک
دستور ی می خوام که ID آخرین رکورد که در جدول ثبت شده بده

shahab308
چهارشنبه 04 آذر 1388, 23:47 عصر
سلام
لطفا" کمک
دستور ی می خوام که ID آخرین رکورد که در جدول ثبت شده بده


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

microland
یک شنبه 06 دی 1388, 17:26 عصر
با سلام خدمت دوستان گرامی
اگر ممکنه در مورد پیمایش رکورد ها با استفاده از linq کمی توضیح دهید
مثلا چگونه میشه در برنامه دو کلید به نام های movenext و moveprevious گذاشت که با کلیک بر روی اینها بتوان به رکورد قبلی یا بعدی رفت و مقادیر آنها در TextBox نمایش داده شود

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

raziee
دوشنبه 07 دی 1388, 11:53 صبح
مثلا چگونه میشه در برنامه دو کلید به نام های movenext و moveprevious گذاشت که با کلیک بر روی اینها بتوان به رکورد قبلی یا بعدی رفت و مقادیر آنها در TextBox نمایش داده شود

لینک زیر رو نگاه بفرمایید.
http://www.barnamenevis.org/forum/showthread.php?t=196548
میتونه کمکون کنه.
این لیک هم هست:
http://barnamenevis.org/forum/showpost.php?p=864958&postcount=20

fateme65
چهارشنبه 30 شهریور 1390, 22:53 عصر
اینو توی یه وبلاگ دیدم . به نظرم جالب اومد :

- 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 (تقریبا چیزی شبیه به مدیر ارتباط با پایگاه) به پروژه اضافه میشود. به شکل زیر توجه کنید:





http://www.persiadevelopers.com/images/article/LINQ-Basic/pic.jpg


حالا جداول دیتابیس که قرار است روی آنها تغییراتی اعمال شود به قسمت 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
پنج شنبه 13 بهمن 1390, 13:34 عصر
با سلام به همگی
ابتدا از تمام فایلهایی که در مورد linq گذاشتید از شما تشکر می کنم من برای پروژه پایانی دارم با linq کار میکنم ولی من نمیتونم با linq 3 عمل پشتیبان گیری و بازگردانی پشتیبان و گزارشگیری را انجام بدم از شما خواهش و تقاضا دارم در این 3 زمینه اگر فایلی یا کدی دارید که به من کمک میکند اینجا بزارید خیلی لازمش دارم خواهشا اگر فایل دارید به ایمیلم ارسال کنید یااینجا بزارید اینم ایمیلم
ramzani.ebrahim@yahoo.com

PirouzNZ
دوشنبه 09 بهمن 1391, 13:06 عصر
سلام به مهندسان عزیز
من می خوام توسط دستورات linq از پایگاه داده ی خودم backup بگیرم در صورت امکان منو راهنمایی کنید خیلی خیلی ممنون

MOR_MS
سه شنبه 10 بهمن 1391, 16:54 عصر
با سلام
من دو تا جدول دارم جدول A و جدول B در A تعدادي ركورد ثبت شده كه با جدول B يك رابطه يك به چند دارد مي خوام با استفاده از linq يك كوري بگيرم كه فيلد (مبلغ) را در جدول B برا ي هر ركورد متناظر جدول A جمع بزنه و در كوري نشان دهد
فكر كنم اول بايد جدول B گروه بندي كنم اگه ميشه به زبان vb برام درست كنين ممنون ميشم

HAMRAHSOFT.IR
سه شنبه 10 بهمن 1391, 23:37 عصر
جستجو بین دو تاریخ در linqبه چه صورت است امکان داره دوستان بکنمونه قرار بدن یا توضیح بدن

MOR_MS
چهارشنبه 11 بهمن 1391, 00:59 صبح
با سلام
من دو تا جدول دارم جدول A و جدول B در A تعدادي ركورد ثبت شده كه با جدول B يك رابطه يك به چند دارد مي خوام با استفاده از linq يك كوري بگيرم كه فيلد (مبلغ) را در جدول B برا ي هر ركورد متناظر جدول A جمع بزنه و در كوري نشان دهد
فكر كنم اول بايد جدول B گروه بندي كنم اگه ميشه به زبان vb برام درست كنين ممنون ميشم

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

HAMRAHSOFT.IR
پنج شنبه 19 بهمن 1391, 16:43 عصر
جستجو بین دو تاریخ در linqبه چه صورت است امکان داره دوستان بکنمونه قرار بدن یا توضیح بدن؟
دوستان کسی کار نکرده؟

samane.t
پنج شنبه 29 فروردین 1392, 11:22 صبح
سلام
من میخوام نام جدول رو به صورت پارامتری بفرستم و اگر اون جدول وجود داشت کاری که میخوام رو انجام بده
تا اینجا تونستم که نام رو پاس بدم و کاری که میخوام رو انجام بدم ، اما این فقط برای جداولی که وجود دارند درست کار میکنه و اگه نام جدولی رو که میخوام هنوز ساخته نشده باشه و وجود نداشته باشه ارور میده که 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();