PDA

View Full Version : آموزش LINQ (از ابتدا تا انتها)



raziee
جمعه 13 آذر 1388, 12:29 عصر
با درود
در این تاپیک قصد دارم چگونگی پرس و جو کردن (کوئری گرفتن) از Object ، XML و بانک های اطلاعاتی را آموزش دهم.
منبع این آموزش کتاب زیر است:


Professional ASP.NET 3.5 In C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎ and VB


by Bill Evjen , Scott Hanselman , Devin Rader
»» توجه داشته باشید که این تاپیک با گذشت مدت زمان اندکی ، کامل خواهد شد.:کف:
»» در پایان PDF و نمونه کدها به صورت یکجا برای دانلود گذاشته خواهد شد.
شاد و پیروز باشید.

-------------------------------------------------------------------------------------------------------------------------------
خواهشمند است در این تاپیک از ارسال پست های بی محتوا خود داری کنید.
برای تشکر و ارزش یابی پست ها از دکمه های "http://barnamenevis.org/forum/images/buttons/post_thanks.gif (http://barnamenevis.org/forum/#)" و "آیا این پاسخ را مفید ارزیابی می کنید؟ http://barnamenevis.org/forum/images/buttons/ha_thumbsup.gif (http://barnamenevis.org/forum/#) | http://barnamenevis.org/forum/images/buttons/ha_thumbsdn.gif (http://barnamenevis.org/forum/#)" استفاده کنید.
دوستانی که اظهار نظر خاصی در رابطه با این تاپیک دارند پیام خصوصی برای اینجانب ارسال کنند.
------------------------------------------------------------------------------------------------------------------------------
»» پست های آموزش در این تاپیک :
»»» توجه فایل های ضمیمه که در انتهای هر پست آموزشی بود حذف شد و به طوره یک جا در ضمیمه برای دانلود گذاشته شده است.
پست 2 (http://barnamenevis.org/forum/showpost.php?p=861261&postcount=2) || مقدمه : پرس و جو کردن با LINQ
http://www.barnamenevis.org/forum/images/icons/icon14.gif LINQ به Objects
روش پرس و جوی سنتی (بدون استفاده از LINQ)
پست 08 (http://barnamenevis.org/forum/showpost.php?p=861964&postcount=8) || http://www.barnamenevis.org/forum/images/icons/icon1.gif مقدمه ای بر LINQ به Object | روش پرس و جوی سنتی (بدون استفاده از LINQ) | مثال 1 : ایجاد کلاس پایه | مثال 2 : ایجاد یک پرس و جوی ساده | مثال 3 : فیلتر کردن لیست فیلم ها
پست 09 (http://barnamenevis.org/forum/showpost.php?p=862230&postcount=9) || مثال 3 : فیلتر کردن لیست فیلم ها
پست 10 (http://barnamenevis.org/forum/showpost.php?p=862399&postcount=10) || مثال 4 : پروه بندی و مرتب سازی فهرست فیلم ها
جایگزین کردن LINQ به جای روش های سنتی
پست 11 (http://barnamenevis.org/forum/showpost.php?p=862598&postcount=11) || http://www.barnamenevis.org/forum/images/icons/icon1.gif جایگزین کردن LINQ به جای روش های سنتی | اضافه کردن فضا نام LINQ
پست 11 (http://barnamenevis.org/forum/showpost.php?p=862598&postcount=11) || مثال 5 : ایجاد پرس و جو با LINQ
پست 12 (http://barnamenevis.org/forum/showpost.php?p=862754&postcount=12) || مثال 6 : ایجاد طرح های سفارشی با LINQ | مثال 7 : تغییر نام ستون ها
پست 13 (http://barnamenevis.org/forum/showpost.php?p=863034&postcount=13) || مثال 8 : مرتب سازی داده ها با استفاده از LINQ
پست 14 (http://barnamenevis.org/forum/showpost.php?p=863080&postcount=14) || http://www.barnamenevis.org/forum/images/icons/icon1.gif فیلتر کردن پرس و جو ها | مثال 9 : اضافه کردن فیلتر (شرط) در پرس و جو های LINQ | مثال 10 : اضافه کردن دو شرط در یک پرس و جو
ست 17 (http://barnamenevis.org/forum/showpost.php?p=864230&postcount=17) || http://www.barnamenevis.org/forum/images/icons/icon1.gif گروه بندی داده ها مثال 11 : گروه بندی داده ها با استفاده از پرس و جوی LINQ
پست 18 (http://barnamenevis.org/forum/showpost.php?p=864519&postcount=18) || http://www.barnamenevis.org/forum/images/icons/icon1.gif اپراتور های دیگر در LINQ | مثال 12 : استفاده از اپراتور ها در پرس و جو های LINQ
پست 19 (http://barnamenevis.org/forum/showpost.php?p=864695&postcount=19) || http://www.barnamenevis.org/forum/images/icons/icon1.gif پیوند در LINQ | مثال 13 : کلاس ژانر | مثال 14 : برگرداندن مجموعه ی ژانر ها | مثال 15 : پیوند لیست ژانر و لیست فیلم با استفاده از LINQ
پست 20 (http://barnamenevis.org/forum/showpost.php?p=864958&postcount=20) || http://www.barnamenevis.org/forum/images/icons/icon1.gif صفحه بندی با استفاده از LINQ | مثال 16 : صفحه بندی ساده و با استفاده از متد های LINQ

http://www.barnamenevis.org/forum/images/icons/icon14.gif LINQ به XML
پست 21 (http://barnamenevis.org/forum/showpost.php?p=865425&postcount=21)|| http://www.barnamenevis.org/forum/images/icons/icon1.gif LINQ به XML | مثال 17 : ایجاد یک فایل XML که حاوی اطلاعات فیلم | مثال 18 : یک پرس و جوی ساده بر روی فایل های XML را با استفاده از LINQ
پست 22 (http://barnamenevis.org/forum/showpost.php?p=865662&postcount=22) || مثال 19 : مشخص کردن نوع عناصر XML با استفاده از LINQ
پست 23 (http://barnamenevis.org/forum/showpost.php?p=868977&postcount=23) ||http://www.barnamenevis.org/forum/images/icons/icon1.gif join دادهای XML با استفاده از LINQ | مثال 20 : فایل XML ژانر ها | مثال 21 : join دادهای XML با استفاده از LINQ
http://www.barnamenevis.org/forum/images/icons/icon14.gif LINQ به SQL
پست 24 (http://barnamenevis.org/forum/showpost.php?p=873690&postcount=24) || http://www.barnamenevis.org/forum/images/icons/icon1.gif مقدمه ای بر LINQ به SQL
پست 25 (http://barnamenevis.org/forum/showpost.php?p=878002&postcount=25) || http://www.barnamenevis.org/forum/images/icons/icon1.gifادامه LINQ to SQL | مثال 22 : ایجاد یک data context جدید | مثال 23 : پرس و جو گرفتن از داده های فیلم در LINQ to SQL
پست 35 (http://barnamenevis.org/forum/showpost.php?p=1086473&postcount=35) || http://www.barnamenevis.org/forum/images/icons/icon1.gifادامه LINQ to SQL | مثال 24 : نوشتن پرس و جوی LINQ به SQL در پنجره ی Output | مثال 9-26 : گروه بندی داده ها توسط LINQ به SQL


یک نمونه کار با LINQ to SQL (http://www.barnamenevis.org/forum/showthread.php?t=238682)

raziee
جمعه 13 آذر 1388, 12:31 عصر
پرس و جو کردن با LINQ
LINQ(مخفف Language Integrated Query و به معنای زبان پرس و جوی یکپارچه) تکنولوژی است که در دات نت 3.5 معرفی شده است.
LINQ برای پر کردن شکافی های موجود در زبان های دات نت طراحی شده است ، که توسعه زبان های شیئ گرا را کامل تر و قوی تر می سازد. LINQ زبانی شبیه به SQL است که با ترکیبی مخصوص برای عملیات پرس و جو طراحی شده است.
با معرفی LINQ در دات نت ، برای اولین بار پرس و جو (کوئری) مفهوم کلاس را در دات نت پیدا می کند. مستقل از اینکه از شیئ(object) ، XML و یا داده ها (data) کوئری گرفته شود.
LINQ شامل پرس و جوهایی برای کار کردن با سه نوع داده اساسی و پایه ای زیر است :


LINQ به Objects
LINQ به XML ( یا XLINQ)
LINQ به SQL ( یا DLINQ)

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

Microsoft.net
جمعه 13 آذر 1388, 23:16 عصر
خوبه حداقل فایده خوندن این تاپیک این بود که معنی از ابتدا تا انتها رو هم فهمیدیم !

Hossein Bazyan
جمعه 13 آذر 1388, 23:25 عصر
خوبه حداقل فایده خوندن این تاپیک این بود که معنی از ابتدا تا انتها رو هم فهمیدیم !

سلام
دوستان بحث جالبیه لطفا فقط از دکمه تشکر استفاده کنید و هیچ تاپیکی در این بخش باز نکنید تا بتوانیم خوب استفاده کنیم ( با توجه به کمبود منابع فارسی در این زمینه )
لطفا"

hp1361
جمعه 13 آذر 1388, 23:48 عصر
سام دوست عزیز آقای Raziee

به نظرم اگه همون ابتدا چند تا از مشکلاتی که وجود داشت و حالا به کمک LINQ میشه به سادگی ازش گذشت رو بیان کنید ، خواننده بیشتر راغب میشه که بدونه این مطالب جدید چه چیزی رو در نهایت یادش خواهد داد.

موفق و پیروز باشی

raziee
شنبه 14 آذر 1388, 10:52 صبح
خوبه حداقل فایده خوندن این تاپیک این بود که معنی از ابتدا تا انتها رو هم فهمیدیم !
شما بهتره قبل از فهمیدن هرچیزی بفهمید که اگه یه پستی رو میخونید اون رو درست و کامل بخونید بعد برید سراغ یادگیری های دیگتون.

توجه داشته باشید که این تاپیک با گذشت مدت زمان اندکی کامل خواهد شد.

همونطور که گفتم این تاپیک با گذشت زمان کوتاهی کامل خواهد شد.
توقع ندارین که یک شبه بشینم و ترجمه کنم و تایپ کنم و این جا بزارم.
-----------

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

raziee
شنبه 14 آذر 1388, 15:20 عصر
LINQ به Objects
اولین و ابتدایی ترین نوع LINQ ، LINQ به Objects است. با کمک آن شما قادر خواهید بود تا بر روی هر enumerable object (هر شیئ که بوسیله ی واسط کاربری IEnumerable پیاده سازی می شود) عملیات پرس و جوی پیچیده را انجام دهید.
در حالی که ایجاد اشیائ ترجمه نشده (enumerable objects) که بتوان از آن کوئری گرفت و یا آن را مرتب کرد اندیشه جدیدی در دات نت نیست اما انجام چنین کاری در نسخه های قبل از ، 3.5 معمولا نیازمند مقدار قابل توجهی کدنویسی بود. اغلب کد های نوشته شده در نهایت پیچیده است و خواندن ، درک و توسعه آن توسط توسعه دهندگان دیگر سخت و دشوار است.
روش پرس و جوی سنتی(بدون استفاده از LINQ
به منظور درک بهتر توانایی LINQ در بهبود بخشیدن پرس و جو ها ، نیاز است که شما نحوه ی پرس و جو گرفتن بدون LINQ را بدانید.
مثال های 1 تا 4 مثال هایی هستند که پرس و جو هایی را بدون استفاده از LINQ ایجاد کردند و مشکلات آن ها را بررسی خواهیم کرد.
مثال 1 یک کلاس فیلم ساده که شما میتوانید به عنوان پایه از آن استفاده کنید را نشان میدهد:
کد های VB.NET

Imports Microsoft.VisualBasic
Public Class Movie
Private _title As String
Private _director As String
Private _genre As Integer
Private _runtime As Integer
Private _releasedate As DateTime
Public Property Title() As String
Get
Return _title
End Get
Set(ByVal value As String)
_title = value
End Set
End Property
Public Property Director() As String
Get
Return _director
End Get
Set(ByVal value As String)
_director = value
End Set
End Property
Public Property Genre() As Integer
Get
Return _genre
End Get
Set(ByVal value As Integer)
_genre = value
End Set
End Property
Public Property Runtime() As Integer
Get
Return _runtime
End Get
Set(ByVal value As Integer)
_runtime = value
End Set
End Property
Public Property ReleaseDate() As DateTime
Get
Return _releasedate
End Get
Set(ByVal value As DateTime)
_releasedate = value
End Set
End Property
End Class

کد های C-Sharp

using System;
public class Movie
{
public string Title { get; set; }
public string Director { get; set; }
public int Genre { get; set; }
public int RunTime { get; set; }
public DateTime ReleaseDate { get; set; }
}

این یک کلاس ساده است که در طول این قسمت از آن استفاده می شود.
حالا که یک کلاس پایه برای کار کردن داریم بیایید نحوه ی استفاده از آن را بدون LINQ ببینیم.
مثال 2 چگونگی ایجاد یک لیست عمومی فیلم و اتصال آن به گریدویو در ASP.NET را نشان میدهد:

<%@ Page Language="VB" %>
<%@ Import Namespace="System.Collections.Generic" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Me.GridView1.DataSource = movies
Me.GridView1.DataBind()
End Sub
Public Function GetMovies() As List(Of Movie)
Dim movies As Movie() = { _
New Movie With {.Title = "Shrek", .Director = "Andrew Adamson", _
.Genre = 0, .ReleaseDate = DateTime.Parse("5/16/2001"),
.Runtime = 89}, _
New Movie With {.Title = "Fletch", .Director = "Michael Ritchie", _
.Genre = 0, .ReleaseDate = DateTime.Parse("5/31/1985"),
.Runtime = 96}, _
New Movie With {.Title = "Casablanca", .Director = "Michael Curtiz", _
.Genre = 1, .ReleaseDate = DateTime.Parse("1/1/1942"),
.Runtime = 102}, _
New Movie With {.Title = "Batman", .Director = "Tim Burton", _
.Genre = 1, .ReleaseDate = DateTime.Parse("6/23/1989"),
.Runtime = 126}, _
New Movie With {.Title = "Dances with Wolves",
.Director = "Kevin Costner", _
.Genre = 1, .ReleaseDate = DateTime.Parse("11/21/1990"),
.Runtime = 180}, _
New Movie With {.Title = "Dirty Dancing", .Director = "Emile Ardolino", _
.Genre = 1, .ReleaseDate = DateTime.Parse("8/21/1987"),
.Runtime = 100}, _
New Movie With {.Title = "The Parent Trap", .Director = "Nancy Meyers", _
.Genre = 0, .ReleaseDate = DateTime.Parse("7/29/1998"),
.Runtime = 127}, _
New Movie With {.Title = "Ransom", .Director = "Ron Howard", _
.Genre = 1, .ReleaseDate = DateTime.Parse("11/8/1996"),
.Runtime = 121}, _
New Movie With {.Title = "Ocean’s Eleven", .Director = "Steven Soderbergh", _
.Genre = 1, .ReleaseDate = DateTime.Parse("12/7/2001"),
.Runtime = 116}, _
New Movie With {.Title = "Steel Magnolias", .Director = "Herbert Ross", _
.Genre = 1, .ReleaseDate = DateTime.Parse("11/15/1989"),
.Runtime = 117}, _
New Movie With {.Title = "Mystic Pizza", .Director = "Donald Petrie", _
.Genre = 1, .ReleaseDate = DateTime.Parse("10/21/1988"),
.Runtime = 104}, _
New Movie With {.Title = "Pretty Woman", .Director = "Garry Marshall", _
.Genre = 1, .ReleaseDate = DateTime.Parse("3/23/1990"),
.Runtime = 119}, _
New Movie With {.Title = "Interview with the Vampire",
.Director = "Neil Jordan", _
.Genre = 1, .ReleaseDate = DateTime.Parse("11/11/1994"),
.Runtime = 123}, _
New Movie With {.Title = "Top Gun", .Director = "Tony Scott", _
.Genre = 2, .ReleaseDate = DateTime.Parse("5/16/1986"),
.Runtime = 110}, _
New Movie With {.Title = "Mission Impossible",
.Director = "Brian De Palma", _
.Genre = 2, .ReleaseDate = DateTime.Parse("5/22/1996"),
.Runtime = 110}, _
New Movie With {.Title = "The Godfather",
.Director = "Francis Ford Coppola", _
.Genre = 1, .ReleaseDate = DateTime.Parse("3/24/1972"),
.Runtime = 175}, _
New Movie With {.Title = "Carlito’s Way", .Director = "Brian De Palma", _
.Genre = 1, .ReleaseDate = DateTime.Parse("11/10/1993"),
.Runtime = 144}, _
New Movie With {.Title = "Robin Hood: Prince of Thieves", _
.Director = "Kevin Reynolds", .Genre = 1, _
.ReleaseDate = DateTime.Parse("6/14/1991"), .Runtime = 143}, _
New Movie With {.Title = "The Haunted", .Director = "Robert Mandel", _
.Genre = 1, .ReleaseDate = DateTime.Parse("5/6/1991"),
.Runtime = 100}, _
New Movie With {.Title = "Old School", .Director = "Todd Phillips", _
.Genre = 0, .ReleaseDate = DateTime.Parse("2/21/2003"),
.Runtime = 91}, _
New Movie With {.Title = "Anchorman: The Legend of Ron Burgundy", _
.Director = "Adam McKay", .Genre = 0, _
.ReleaseDate = DateTime.Parse("7/9/2004"),
.Runtime = 94}, _
New Movie With {.Title = "Bruce Almighty", .Director = "Tom Shadyac", _
.Genre = 0, .ReleaseDate = DateTime.Parse("5/23/2003"),
.Runtime = 101}, _
New Movie With {.Title = "Ace Ventura: Pet Detective", _
.Director = "Tom Shadyac", .Genre = 0, _
.ReleaseDate = DateTime.Parse("2/4/1994"),
.Runtime = 86}, _
New Movie With {.Title = "Goonies", .Director = "Richard Donner", _
.Genre = 0, .ReleaseDate = DateTime.Parse("6/7/1985"),
.Runtime = 114}, _
New Movie With {.Title = "Sixteen Candles", .Director = "John Hughes", _
.Genre = 1, .ReleaseDate = DateTime.Parse("5/4/1984"),
.Runtime = 93}, _
New Movie With {.Title = "The Breakfast Club", .Director = "John Hughes", _
.Genre = 1, .ReleaseDate = DateTime.Parse("2/15/1985"),
.Runtime = 97}, _
New Movie With {.Title = "Pretty in Pink", .Director = "Howard Deutch", _
.Genre = 1, .ReleaseDate = DateTime.Parse("2/28/1986"),
.Runtime = 96}, _
New Movie With {.Title = "Weird Science", .Director = "John Hughes", _
.Genre = 0, .ReleaseDate = DateTime.Parse("8/2/1985"),
.Runtime = 94}, _
New Movie With {.Title = "Breakfast at Tiffany’s", .Director =
"Blake Edwards", _
.Genre = 1, .ReleaseDate = DateTime.Parse("10/5/1961"),
.Runtime = 115}, _
New Movie With {.Title = "The Graduate", .Director = "Mike Nichols", _
.Genre = 1, .ReleaseDate = DateTime.Parse("4/2/1968"),
.Runtime = 105}, _
New Movie With {.Title = "Dazed and Confused", .Director = "Richard
Linklater", _
.Genre = 0, .ReleaseDate = DateTime.Parse("9/24/1993"),
.Runtime = 103}, _
New Movie With {.Title = "Arthur", .Director = "Steve Gordon", _
.Genre = 1, .ReleaseDate = DateTime.Parse("9/25/1981"),
.Runtime = 97}, _
New Movie With {.Title = "Monty Python and the Holy Grail", _
.Director = "Terry Gilliam", .Genre = 0, _
.ReleaseDate = DateTime.Parse("5/10/1975"),
.Runtime = 91}, _
New Movie With {.Title = "Dirty Harry", .Director = "Don Siegel", _
.Genre = 2, .ReleaseDate = DateTime.Parse("12/23/1971"),
.Runtime = 102} _
}
Return New List(Of Movie)(movies)
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>My Favorite Movies</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>


کد های C-Sharp

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
this.GridView1.DataSource = movies;
this.GridView1.DataBind();
}
public List<Movie> GetMovies()
{
return new List<Movie> {
new Movie { Title="Shrek", Director="Andrew Adamson", Genre=0,
ReleaseDate=DateTime.Parse("5/16/2001"), RunTime=89 } ,
new Movie { Title="Fletch", Director="Michael Ritchie", Genre=0,
ReleaseDate=DateTime.Parse("5/31/1985"), RunTime=96 } ,
new Movie { Title="Casablanca", Director="Michael Curtiz", Genre=1,
ReleaseDate=DateTime.Parse("1/1/1942"), RunTime=102 } ,
new Movie { Title="Batman", Director="Tim Burton", Genre=1,
ReleaseDate=DateTime.Parse("6/23/1989"), RunTime=126 } ,
new Movie { Title="Dances with Wolves", Director="Kevin Costner",Genre=1,
ReleaseDate=DateTime.Parse("11/21/1990"), RunTime=180 } ,
new Movie { Title="Dirty Dancing", Director="Emile Ardolino", Genre=1,
ReleaseDate=DateTime.Parse("8/21/1987"), RunTime=100 } ,
new Movie { Title="The Parent Trap", Director="Nancy Meyers", Genre=0,
ReleaseDate=DateTime.Parse("7/29/1998"), RunTime=127 } ,
new Movie { Title="Ransom", Director="Ron Howard", Genre=1,
ReleaseDate=DateTime.Parse("11/8/1996"), RunTime=121 } ,
new Movie { Title="Ocean’s Eleven", Director="Steven
Soderbergh", Genre=1,
ReleaseDate=DateTime.Parse("12/7/2001"), RunTime=116 } ,
new Movie { Title="Steel Magnolias", Director="Herbert Ross", Genre=1,
ReleaseDate=DateTime.Parse("11/15/1989"), RunTime=117 } ,
new Movie { Title="Mystic Pizza", Director="Donald Petrie", Genre=1,
ReleaseDate=DateTime.Parse("10/21/1988"), RunTime=104 } ,
new Movie { Title="Pretty Woman", Director="Garry Marshall", Genre=1,
ReleaseDate=DateTime.Parse("3/23/1990"), RunTime=119 } ,
new Movie { Title="Interview with the Vampire",
Director="Neil Jordan", Genre=1,
ReleaseDate=DateTime.Parse("11/11/1994"), RunTime=123 } ,
new Movie { Title="Top Gun", Director="Tony Scott", Genre=2,
ReleaseDate=DateTime.Parse("5/16/1986"), RunTime=110 } ,
new Movie { Title="Mission Impossible", Director="Brian De Palma", Genre=2,
ReleaseDate=DateTime.Parse("5/22/1996"), RunTime=110 } ,
new Movie { Title="The Godfather", Director="Francis Ford Coppola",
Genre=1, ReleaseDate=DateTime.Parse("3/24/1972"), RunTime=175 } ,
new Movie { Title="Carlito’s Way", Director="Brian De Palma",
Genre=1, ReleaseDate=DateTime.Parse("11/10/1993"), RunTime=144 } ,
new Movie { Title="Robin Hood: Prince of Thieves",
Director="Kevin Reynolds",
Genre=1, ReleaseDate=DateTime.Parse("6/14/1991"), RunTime=143 } ,
new Movie { Title="The Haunted", Director="Robert Mandel",
Genre=1, ReleaseDate=DateTime.Parse("5/6/1991"), RunTime=100 } ,
new Movie { Title="Old School", Director="Todd Phillips",
Genre=0, ReleaseDate=DateTime.Parse("2/21/2003"), RunTime=91 } ,
new Movie { Title="Anchorman: The Legend of Ron Burgundy",
Director="Adam McKay", Genre=0,
ReleaseDate=DateTime.Parse("7/9/2004"), RunTime=94 } ,
new Movie { Title="Bruce Almighty", Director="Tom Shadyac",
Genre=0, ReleaseDate=DateTime.Parse("5/23/2003"), RunTime=101 } ,
new Movie { Title="Ace Ventura: Pet Detective", Director="Tom Shadyac",
Genre=0, ReleaseDate=DateTime.Parse("2/4/1994"), RunTime=86 } ,
new Movie { Title="Goonies", Director="Richard Donner",
Genre=0, ReleaseDate=DateTime.Parse("6/7/1985"), RunTime=114 } ,
new Movie { Title="Sixteen Candles", Director="John Hughes",
Genre=1, ReleaseDate=DateTime.Parse("5/4/1984"), RunTime=93 } ,
new Movie { Title="The Breakfast Club", Director="John Hughes",
Genre=1, ReleaseDate=DateTime.Parse("2/15/1985"), RunTime=97 } ,
new Movie { Title="Pretty in Pink", Director="Howard Deutch",
Genre=1, ReleaseDate=DateTime.Parse("2/28/1986"), RunTime=96 } ,
new Movie { Title="Weird Science", Director="John Hughes",
Genre=0, ReleaseDate=DateTime.Parse("8/2/1985"), RunTime=94 } ,
new Movie { Title="Breakfast at Tiffany’s", Director="Blake Edwards",
Genre=1, ReleaseDate=DateTime.Parse("10/5/1961"), RunTime=115 } ,
new Movie { Title="The Graduate", Director="Mike Nichols",
Genre=1, ReleaseDate=DateTime.Parse("4/2/1968"), RunTime=105 } ,
new Movie { Title="Dazed and Confused", Director="Richard Linklater",
Genre=0, ReleaseDate=DateTime.Parse("9/24/1993"), RunTime=103 } ,
new Movie { Title="Arthur", Director="Steve Gordon",
Genre=1, ReleaseDate=DateTime.Parse("9/25/1981"), RunTime=97 } ,
new Movie { Title="Monty Python and the Holy Grail",
Director="Terry Gilliam",
Genre=0, ReleaseDate=DateTime.Parse("5/10/1975"), RunTime=91 } ,
new Movie { Title="Dirty Harry", Director="Don Siegel",
Genre=2, ReleaseDate=DateTime.Parse("12/23/1971"), RunTime=102 }
};
}
</script>


این مثال ساده را در ASP.NET نوشتیم که شامل یک گریدویو برای نمایش اطلاعات عمومی فیلم است. آن را اجرا کنید و نتیجه را ببینید.
توجه داشته باشید که استفاده از کتابخانه ی زیر را فراموش نکنید.
using System.Collections.Generic;

در مثال بعدی (http://barnamenevis.org/forum/showthread.php?p=862230#post862230) یک فیلترینگ ساده را بدون LINQ بررسی خواهیم کرد.

raziee
شنبه 14 آذر 1388, 23:43 عصر
در مثال قبلی (http://barnamenevis.org/forum/showpost.php?p=861964&postcount=8) نحوه ی نمایش اطلاعات از نوع Object را بدون استفاده از LINQ یاد گرفتیم در این مثال معمولی ترین راه برای فیلتر کردن داده ها را یاد میگیریم و مشکلات آن را بررسی میکنیم.
مثال 3 : فیلتر کردن لیست فیلم
به عنوان نمونه برای فیلتر کردن داده ها و نمایش فیلم ها در یک ژانر خاص نیاز به ایجاد یک مجموعه موقت جدید و استفاده از حلقه foreach برای نمایش اطلاعات است.
کد های VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query As New List(Of Movie)()
For Each m In movies
If (m.Genre = 0) Then
query.Add(m)
End If
Next
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C-Sharp

protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = new List<Movie>();
foreach (var m in movies)
{
if (m.Genre == 0) query.Add(m);
}
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}

ممکن است این روش آسان به نظر رسیده و کفایت کننده باشد اما با این حال شما ملزم به تعریف چیزی هستید که می خواهید انجام دهید. (پیدا کردن تمام فیلم ها در این ژانر) علاوه بر آن شما باید به طور واضح آن را تعریف کنید (استفاده از حلقه foreach و یک مجموعه به طور موقت)
علاوه بر این ، برای نمایش داده ها با پرس و جوی پیچیده تر که شامل داده های گروه بندی شده و یا مرتب شده باشد ، باید چه کاری باید انجام داد و چه کد هایی باید نوشت؟
برای انجام چنین کاری کد ها بسیار پیچیده خواهند شدکه آن ها را در مثال بعدی (http://barnamenevis.org/forum/showthread.php?p=862399#post862399)خواهید دید.

raziee
یک شنبه 15 آذر 1388, 11:11 صبح
در مثال قبلی (http://barnamenevis.org/forum/showthread.php?p=862230#poststop) فیلترینگ ساده اطلاعات را نشان دادیم و در این مثال با پرس و جوی پیچیده تر که شامل داده های گروه بندی شده و یا مرتب شده است را نشان خواهیم داد.
مثال 4 : گروه بندی و مرتب سازی فهرست فیلم ها
کد های VB.NET

Public Class Grouping
Private _genre As Integer
Private _movieCount As Integer
Public Property Genre() As Integer
Get
Return _genre
End Get
Set(ByVal value As Integer)
_genre = value
End Set
End Property
Public Property MovieCount() As Integer
Get
Return _movieCount
End Get
Set(ByVal value As Integer)
_movieCount = value
End Set
End Property
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim groups As New Dictionary(Of String, Grouping)
For Each m In movies
If (Not groups.ContainsKey(m.Genre)) Then
groups(m.Genre) = _
New Grouping With {.Genre = m.Genre, .MovieCount = 0}
End If
groups(m.Genre).MovieCount = groups(m.Genre).MovieCount + 1
Next
Dim results As New List(Of Grouping)(groups.Values)
results.Sort(AddressOf MovieSort)
Me.GridView1.DataSource = results
Me.GridView1.DataBind()
End Sub
Private Function MovieSort(ByVal x As Grouping, ByVal y As Grouping) As Integer
Return IIf(x.MovieCount > y.MovieCount, -1, IIf(x.MovieCount
< y.MovieCount, 1, 0))
End Function

کد های C-Sharp

public class Grouping
{
public int Genre { get; set; }
public int MovieCount { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
Dictionary<int, Grouping> groups = new Dictionary<int, Grouping>();
foreach (Movie m in movies)
{
if (!groups.ContainsKey(m.Genre))
{
groups[m.Genre] = new Grouping { Genre = m.Genre, MovieCount = 0 };
}
groups[m.Genre].MovieCount++;
}
List<Grouping> results = new List<Grouping>(groups.Values);
results.Sort(delegate(Grouping x, Grouping y)
{
return
x.MovieCount > y.MovieCount ? -1 :
x.MovieCount < y.MovieCount ? 1 :
0;
});
this.GridView1.DataSource = results;
this.GridView1.DataBind();
}

برای گروه بندی فیلم ها در هر ژانر و شمارش تعداد فیلم در هر ژانر ، نیازمند ایجاد یک کلاس جدید ، ایجاد یک فرهنگ لغت(Dictionary) و اجرای آن در یک نمونه هستیم . میبینیم که برای انجام چنین کار ساده ای کد ها پیچیده شدند علاوه بر آن منابع بسیاری را درگیر کاری که می خواهید انجام دهید می کنید.
نحوه یک پرس و جوی کمی پیچیده اینگونه بود حالا شما فکر میکنید از همین روش ها استفاده میکنید و یا به دنبال راه کار های دیگری هستید که از کد ها و منابع کمتری استفاده کند.
این را در نظر بگیرید : اگر شما مجبور باشید برنامه ای را توسعه دهید که با کدهای آن آشنا نیستید ، چه مدت طول می کشد که با کد ها آشنا شوید تا برنامه را به شکلی که میخواهید تغییر دهید؟
در پست بعدی روش های سنتی را با استفاده از LINQ خواهیم نوشت.

raziee
یک شنبه 15 آذر 1388, 16:25 عصر
جایگزین کردن LINQ به جای روش های سنتی
LINQ برای از بین بردن کاستی هایی است که در پرس و جو های قبلی دیدیم. به جای آنکه شما برای رسیدن به هدفتون(پرس و جوهای پیچیده) منابع زیدی رو درگیر کنید و همچنین کدهای زیادی را بنویسید میتوانید از LINQ استفاده کنید. LINQ به شما قدرت میدهد تا به سادگی به آن چیزی که از یک پرس و جو میخواهید برسید بدون آنکه خود را درگیر کنید. دات نت و کامپایلرش تمام کار ها را انجام میدهند و پرس و جو را اجرا میکنند.
در این پست نگاهی به LINQ داریم و خواهیم دید که چگونه با استفاده از آن میتوان نمایش داده ها را بسیار ساده کرد.
برای درک سادگی کار ، ما همان مثال های قبلی را که بدون استفاده از LINQ با حجم کد بالا و استفاده از منابع دیگر نوشتیم ، این بار با استفاده از LINQ خواهیم نوشت و خواهیم دید که استفاده از LINQ چگونه باعث آسان تر شده کار ما شد.
پایه و اساس پرس و جو های LINQ
برای استفاده از LINQ باید کتابخانه ی مربوطه را به برنامه ی خود اضافه کنید. این کتابخانه در آدرس زیر قرار دارد:

اضافه کردن فضا نام LINQ

using System.Linq;

اضافه کردن این فضای نام امکان دسترسی به تمام عملکرد LINQ را میدهد.
حالا می توانیم با تغییر کدهای مثال 2 شروع کنیم.
اگر به یاد داشته باشید ، در آن مثال ما یک نمونه از لیست عمومی فیلم ها را ایجاد و آن را به کنترل گرید ویو متصل کردیم.
مثال 5 چگونگی تغییر کد ها را با استفاده از LINQ و نمایش اطلاعات آن را در یک گریدویو نشان میدهد.
مثال 5 : ایجاد پرس و جو با LINQ
کد های VB :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Select m
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub

کد های C-Sharp :

protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
select m;
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}

مثال بالا به سه قسمت تقسیم می شود.

ابتدا : کد های استفاده شده برای بدست آوردن لیست فیلم ها »» GetMovies()
سپس : کد های استفاده شده برای ایجاد یک پرس و جوی بسیار ساده LINQ به منظور اتنخاب تمام اطلاعات لیست فیلم ها
در انتها : اتصال query به گریدویو برای نمایش اطلاعات مورد نظر
توجه داشته باشید که LINQ از کلمات کلیدی خاصی همچون from و یا select در یک پرس و جو استفاده میکند.
در Visual Studio 2008 امکاناتی اضافه شده که خطاهای نوشتاری LINQ را به کاربر گزارش می دهد و شما میتوانید خطا های پرس و جو های نوشته شده را به راحتی پیدا کنید و آن ها را رفع کنید.
در پرس و جو متغیر جدید m تعریف شده است. (نام این متغییر همانند نام تمام متغیر ها انتخابی است.)این متغیر در پرس و جو ها دو کاربرد دارد.
کاربرد اول : به عنوان منبعی که پرس و جو بر روی آن گرفته شده و بعد از کلمه کلیدی from آورده میشود.(همانند نام جدول در دستورات SQL) که در این مورد به مجموعه ی فیلم ها اشاره می کند. (در مثال 5 ملاحظه کنید)
کاربرد دوم : در قسمت select یک پرس و جو استفاده میشود و هدف آن انتخاب ستون ها برای نمایش در خروجی است. (در پست بعد (http://barnamenevis.org/forum/showpost.php?p=862754&postcount=12) ملاحظه خواهید کرد.)

raziee
یک شنبه 15 آذر 1388, 20:47 عصر
در پست قبل (http://barnamenevis.org/forum/showpost.php?p=862754&postcount=11) یک پرس و جوی ساده را با استفاده از LINQ پیاده سازی کردیم در این پست پرس و جو ها را کمی سفارشی خواهیم کرد.

مثال 6 : ایجاد طرح های سفارشی با LINQ
کد های VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Select New With {m.Title, m.Genre}
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub

کد های C-Sharp

protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
select new { m.Title, m.Genre };
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
به نحوه ی استفاده از m توجه کنید ، m برای ایجاد طرحی جدید در پرس و جو به کار گرفته شده است. در خروجی دو ستون عنوان(Title) و ژانر(Genre) نمایش داده شده است.
شما حتی میتوانید به راحتی عناوین ستون ها را LINQ مشخص کنید.
برای مثال ، شما ممکن است بخواهید که عنوان ستون Title را به MovieTitle و عنوان ستون Genre را به MovieGenre تغییر دهید.
با استفاده از LINQ ، انجام چنین کاری به راحتی آب خوردن است. مثال 7 چگونگی این کار را نمایش می دهد.

مثال 7 : تغییر نام ستون ها
کدهای VB
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Select New With {.MovieTitle = m.Title, .MovieGenre = m.Genre}
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎‎‎

protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
select new { MovieTitle = m.Title, MovieGenre = m. Genre };
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
مثال فوق نمونه ای است که بوسیله آن عناوین ستون ها را به راحتی تغییر یافتند.
در مثال بعد (http://barnamenevis.org/forum/showpost.php?p=863034&postcount=13)نحوه ی مرتب سازی به صورت صعودی و نزولی را فرا خواهیم گرفت.

raziee
دوشنبه 16 آذر 1388, 10:12 صبح
مرتب سازی متواند به صورت صعودی و یا نزولی باشد مثال زیر چگونگی انجام این کار را نشان میدهد.
مثال 8 : مرتب سازی داده ها با استفاده از LINQ
کد های VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Order By m.Title Descending _
Select New With {.MovieTitle = m.Title, .MovieGenre = m.Genre}
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub

کدهای C#‎‎‎‎‎

protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
orderby m.Title descending
select new { MovieTitle = m.Title, MovieGenre = m. Genre };
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
یکی دیگر از ویژگی بزرگ LINQ ، syntax آن است که بهبود چشمگیر در خوانایی و understandability دارد.
در LINQ به سادگی میتوانید پرس و جو های خود را پیاده سازی کنید. شما کد های بسیار ساده ای را به کامپایلر میدهید اما خروجی را به بهترین شکل دریافت خواهید کرد.
همانطور که میبینید در LINQ با نوشتن کدهای بسیار کوتاهی ، نتیجه را تغییر میدهیم. این در حالی است که بدون LINQ انجام چنین کاری نیازمند نوشتن کد های طولانی و پیچیده است.
علاوه بر مثال بالا شما میتوانید از متد Where, Count, Min, Max و بسیاری متدهای دیگر در LINQ استفاده کنید.
در پست بعدی (http://barnamenevis.org/forum/showpost.php?p=863080&postcount=14)پرس و های فیلتر شده را بررسی خواهیم کرد.

raziee
دوشنبه 16 آذر 1388, 11:15 صبح
فیلتر کردن پرس و جو ها
LINQ از فیلترینگ هم پشتیبانی میکند . همانطور که قبلا گفتیم LINQ ساختاری شبیه به SQL دارد ، برای شرط گذاری و فیلتر کردن پرس و جو ها از کلمه ی کلیدی where استفاده میشود.
در مثال شماره 3 دیدم که برای فیلتر کردن فیلم ها در یک ژانر خاص بدون استفاده از LINQ باید چه کد هایی را بنویسیم. اینک همان مثال را با استفاده از LINQ بازنویسی میکنیم و شما راحتی کار با LINQ را احساس خواهید کرد.

مثال 9 : اضافه کردن فیلتر (شرط) در پرس و جو های LINQ
کد های VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Where m.Genre = 0 _
Select m
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎‎
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
where m.Genre==0
select m;
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}

دیدم که چگونه با اضافه کردن تنها چند کلمه در پرس و جو (where m.Genre==0) نتیجه تغییر کرد و فقط فیلم هایی که مقدار ژانر آنها برابر با 0 بود نمایش داده شدند.
شما میتوانید در پرس و جو های خود بیش از یک شرط قرار دهید (همانند SQL ) مثال 10 چگونگی اشن کار را به شما نشان میدهد.

مثال 10 : اضافه کردن دو شرط در یک پرس و جو
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Where m.Genre = 0 And m.Runtime > 92 _
Select m
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎‎
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
where m.Genre == 0 && m.RunTime > 92
select m;
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
مثال بالا شامل دو شرط است که برای محدود کردن لیست فیلم ها در یک ژانر خاص و زمان اجرا فیلم به کار میرود.
در پست بعدی (http://barnamenevis.org/forum/showpost.php?p=864230&postcount=17) گروه بندی داده ها را مطرح خواهیم کرد.

ali_khoshandam
سه شنبه 17 آذر 1388, 11:38 صبح
ببخشید دوست عزیز من تفاوتهای دو تکنولوژی ado.net و linq رو میخواستم

raziee
سه شنبه 17 آذر 1388, 12:08 عصر
ببخشید دوست عزیز من تفاوتهای دو تکنولوژی ado.net و linq رو میخواستم
با سلام.
ADO.NET برای کار کردن با پایگاه داده است. که در کتابخانه ی زیر قرار دارد.
using System.Data;
و البته کتابخانه هایی که از این کتابخانه مشاق شده اند.
اما LINQ صرفا برای استفاده در بانک های اطلاعاتی نیست و می تواند بر روی داده هایی از نوع XMLو Object هم پیاده سازی شود.
ADO.NET روش ها و متد هایی را برای کار با بانک های اطلاعاتی فراهم میکند اما LINQ توانایی پرس و جو ها (کوئری گرفتن) را بالا میبرد در عین راحتی(کد های بسیار کم) و خوانایی بالای کد.
شاد باشید

raziee
سه شنبه 17 آذر 1388, 21:20 عصر
گروه بندی داده ها
در LINQ گروه بندی داده ها بسیار ساده است ، استفاده از این دستور نیز همانند استفاده آن در SQL می باشد.
برای نشان دادن چگونگی استفاده از این دستور و نیز راحتی کار با LINQ ما مثال شماره 4 را که قبلا با کد های زیاد و پیچیده ای نوشته بودیم را با استفاده از LINQ بازنویسی میکنیم. مثال زیر چگونگی این کار را به شما نمایش می دهد.
مثال 11 : گروه بندی داده ها با استفاده از پرس و جوی LINQ
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Group By m.Genre Into g = Group, Count()
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎‎
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
group m by m.Genre into g
select new { Genre = g.Key, Count = g.Count() };
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
در این پرس و جو با استفاده از کلمه کلیدی group فیلم ها را بر اسای ژانرشان گروه بندی کردیم.
علاوه بر این ، به دلیل اینکه در گروه بندی داده ها در خروجی چیزی نمایش داده نمیشود با استفاده از ایجاد طرح در پرس و جو ها ، پرس و جو را سفارشی کردیم(رجوع به مثال شماره 6) و شماره ی ژانر و تعداد فیلم های در این گروه را برای نمایش در خروجی آوردیم.
استفاده از LINQ برای انجام چنین کاری(گروه بندی داده ها) به شما کمک می کند تا کد های نوشته شده برای رسیدن به هدفتان را بسیار کاهش دهید.
با مقایسه مثال 4 (که در آن گروه بندی داده ها را با روش سنتی انجام دادیم) و مثال 11 که همان کار را با استفاده از LINQ نوشتیم ملاحظه میکنید که تعداد خطوط نوشته شده برای این کار از 18 خط کد ، به 3 خط کد رسیده و علاوه بر آن خوانایی و وضوح کد ها افزایش پیدا کرده است.
در مثال بعدی (http://barnamenevis.org/forum/showpost.php?p=864519&postcount=18) استفاده از اپراتورهایی نظیر Count, Min, Max, Average, و Sumرا در LINQ نشان خواهیم داد.

raziee
چهارشنبه 18 آذر 1388, 10:05 صبح
اپراتور های دیگر در LINQ
علاوه بر انتخاب(selection) ، فیلترینگ (filtering) و گروه بندی(grouping) ، LINQ همچنین شامل اپراتور های دیگری است که شما میتوانید آنها را در پرس و جو های خود به کار بگیرید.
در SQL از بسیاری از این اپراتور ها قبلا استفاده کردید و برای شما آشنا هستند. این اپراتور ها عبارت اند از : تعداد (Count) ، کمترین (Min) ، بیشترین (Max) ، میانگین (Average) و جمع (Sum) که در مثال زیر آورده شده اند.
مثال 12 : استفاده از اپراتور ها در پرس و جو های LINQ
کد های VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Me.TotalMovies.Text = movies.Count.ToString()
Me.LongestRuntime.Text = movies.Max(Function(m) m.Runtime).ToString()
Me.ShortestRuntime.Text = movies.Min(Function(m) m.Runtime).ToString()
Me.SumRuntime.Text = movies.Sum(Function(m) m.Runtime).ToString()
Me.AverageRuntime.Text = movies.Average(Function(m) m.Runtime).ToString()
End Sub

کد های C#‎‎‎‎‎‎‎‎
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();

this.TotalMovies.Text = movies.Count.ToString();
this.LongestRuntime.Text = movies.Max(m => m.RunTime).ToString();
this.ShortestRuntime.Text = movies.Min(m => m.RunTime).ToString();
this.SumRuntime.Text = movies.Sum(m => m.RunTime).ToString();
this.AverageRuntime.Text = movies.Average(m => m.RunTime).ToString();
}
کد های ASP.NET
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Listing 12 : Using LINQ query operators</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Total Movies : <asp:Label ID="TotalMovies" runat="server" /><br />
Longest Runtime : <asp:Label ID="LongestRuntime" runat="server" /><br />
Shortest Runtime : <asp:Label ID="ShortestRuntime" runat="server" /><br />
Sum Runtime : <asp:Label ID="SumRuntime" runat="server" /><br />
Average Runtime : <asp:Label ID="AverageRuntime" runat="server" /><br />
</div>
</form>
</body>
</html>

در این مثال نحوه ی استفاده از اپراتور های تعداد (Count) ، کمترین (Min) ، بیشترین (Max) ، میانگین (Average) و جمع (Sum) را در مجموعه ی فیلم ها نشان میدهد.
توجه داشته باشید که در این اپراتور ها به غیر از اپراتور تعداد(Count) ، شما باید متدی را فراهم کنید تا این اپراتور ها بر روی فیلدی خاص ، عملیات خود را انجام دهند. این کار با استفاده از یک عبارت که Lambda نامیده میشود انجام می پذیرد.
در پست بعدی (http://barnamenevis.org/forum/showpost.php?p=864695&postcount=19) پیوند را در LINQ مطرح خواهیم کرد.

raziee
چهارشنبه 18 آذر 1388, 14:03 عصر
پیوند در LINQ
LINQ همچنین از unioning داده ها از مجموعه های مختلف پشتیبانی میکند. (چیزی شبیه به join در SQL)
برای مثال : در داده هایی که ما تا کنون از آن ها پرس و جو تهیه کردیم تنها قادر بودند ژانر فیلم ها به صورت کد عددیشان نشان دهند. به وسیله "پیوند" میتوانیم در خروجی نام هر ژانر را به جای کد عددیشان نمایش دهیم.
چنین کاری در LINQ به راحتی امکانپذیر است.
برای انجام چنین کاری یک کلاس با نام Genre ایجاد خواهیم کرد.
مثال 13 : کلاس ژانر
کد های VB.NET

Public Class Genre
Private _id As Integer
Private _name As String
Public Property ID() As Integer
Get
Return _id
End Get
Set(ByVal value As Integer)
_id = value
End Set
End Property
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
End Class
کد های C#‎
public class Genre
{
public int ID { get; set; }
public string Name { get; set; }
}
حالا شما باید متد GetGenres را به کد هایتان اضافه کنید تا لیست ژانر ها را برگرداند.

مثال 14 : برگرداندن مجموعه ی ژانر ها
کد های VB.Net
Public Function GetGenres() As List(Of Genre)
Dim genres As Genre() = { _
New Genre With {.ID = 0, .Name = "Comedy"}, _
New Genre With {.ID = 1, .Name = "Drama"}, _
New Genre With {.ID = 2, .Name = "Action"} _
}
Return New List(Of Genre)(genres)
End Function
کد های C#‎
public List<Genre> GetGenres()
{
return new List<Genre> {
new Genre { ID=0, Name="Comedy" } ,
new Genre { ID=1, Name="Drama" } ,
new Genre { ID=2, Name="Action" }
};
}
سرانجام شما باید رویداد Page Load را به صورت زیر تغییر رهید. این رویداد شامل یک پرس و جو برای برگرداندن لسیت ژانر ها و پیوند آن با لیست فیلم ها است. این تغییرات را در مثال 15 نشان داده شده است.
مثال 15 : پیوند لیست ژانر و لیست فیلم با استفاده از LINQ
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim genres = GetGenres()
Dim query = From m In movies Join g In genres _
On m.Genre Equals g.ID _
Select New With {.Title = m.Title, .Genre = g.Name}
GridView1.DataSource = query
GridView1.DataBind()
End Sub
کد های C#‎

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

raziee
چهارشنبه 18 آذر 1388, 20:51 عصر
صفحه بندی با استفاده از LINQ
در LINQ بسیار آسان میتوان داده ها را برای استفاده در برنامه های تحت وب، صفحه بندی کرد. این کار با استفاده از دو متد : Skip و Take قابل پیاده سازی است.
متد Skip تعداد رکورد ها برای پرش را مشخص میکند.
متد Take مشخص میکند که برای خروجی چه تعداد رکورد برگردانده شوند.
با استفاده از دو متد Skip و Take شما میتوانید داده های مورد نظرتان را در خروجی نمایش دهید.
طریقه استفاده از این متد ها در مثال زیر آورده شده است.

مثال 16 : صفحه بندی ساده و با استفاده از متد های LINQ
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim genres = GetGenres()
Dim query = (From m In movies _
Join g In genres On m.Genre Equals g.ID _
Select New With {m.Title, .Genre = g.Name}).Skip(10).Take(10)
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎
protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var genres = GetGenres();
var query = (from m in movies
join g in genres on m.Genre equals g.ID
select new { m.Title, g.Name }).Skip(10).Take(10);
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
بعد از اجرای این مثال مشاهده خواهید کرد که بعد از پرش 10 رکورد ، 10 رکورد در خروجی نشان داده میشود.
بخش LINQ به Object تمام شد و از پست بعد به سراغ LINQ به XML خواهیم رفت.

raziee
پنج شنبه 19 آذر 1388, 13:54 عصر
LINQ به XML
نوع دوم LINQ ، LINQ به XML (یا XLINQ) است. همانطور که از نامش پیداست LINQ به XML برای استفاده از LINQ در پرس و های XML می باشد.
مطابق با ساختار LINQ ، ساختار LINQ به XML در دات نت نیز به عنوان یک فرمت اساسی گنجانده شده است و توابع موجود را نمیتوان تغییر داد.
همچنین در هسته مرکزیLINQ ، ساختار LINQ به XML در کتابخانه ی System.Xml.Linq گنجانده شده است.
در این پست و پست های آینده چگونگی استفاده از پرس و جو های LINQ در XML را به شما نشان خواهیم داد. ما از همان داده های قبلی فیلم به عنوان پایه که در پست های قبلی مورد استفاده قرار گرفت استفاده می کنیم اما این بار آن ها را با XML پیاده سازی می کنیم.
مثال 17 تبدیل اطلاعات فیلم را در یک سند XML نشان میدهد.

مثال 17 ایجاد یک فایل XML که حاوی اطلاعات فیلم است.
<?xml version="1.0" encoding="utf-8" ?>
<Movies>
<Movie>
<Title>Shrek</Title>
<Director>Andrew Adamson</Director>
<Genre>0</Genre>
<ReleaseDate>5/16/2001</ReleaseDate>
<RunTime>89</RunTime>
</Movie>
<Movie>
<Title>Fletch</Title>
<Director>Michael Ritchie</Director>
<Genre>0</Genre>
<ReleaseDate>5/31/1985</ReleaseDate>
<RunTime>96</RunTime>
</Movie>
<Movie>
<Title>Casablanca</Title>
<Director>Michael Curtiz</Director>
<Genre>1</Genre>
<ReleaseDate>1/1/1942</ReleaseDate>
<RunTime>102</RunTime>
</Movie>
</Movies>
برای شروع چگونگی استفاده از LINQ به XML در اسناد XML اجازه بدهید که با نمایش اطلاعات فایل XML شروع کنیم. مثال 18 یک پرس و جوی ساده بر روی فایل های XML را با استفاده از LINQ نشان میدهد.

مثال 18 یک پرس و جوی ساده بر روی فایل های XML را با استفاده از LINQ :
کد های HTML
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>My Favorite Movies</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim query = From m In XElement.Load(MapPath("Movies.xml")).Elements("Movie") _
Select m
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎
protected void Page_Load(object sender, EventArgs e)
{
var query = from m in XElement.Load(MapPath("Movies.xml")).Elements("Movie")
select m;
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
توجه کنید که در این پرس و جو ، در LINQ به طور مستقیم فایل XML را بارگذاری کرده و عناصر موجود در آن فایل برگردانده می شوند ، که در این مورد همه عناصر فیلم بازیابی می شوند.
تغییر کوچک دیگر که در مثال های قبل دیدید در پرس و جوی LINQ یکسان است.
توجه داشته باشید که در خروجی تمامی تگ ها نمایش داده میشوند. این موضوع به دلیل است که در این پرس و جو از شیء XElement استفاده شده و محتویات عمومی آن را بر میگرداند نه اطلاعات فیلم ها را که انتظار ماست و دلیل آن این است که LINQ به خودی خود هیچ راهی را برای شناسایی نوع داده های اشیاء و برگرداندن آن ندارد. خوشبختانه شما میتوانید نوع داده ها را در پرس و جو مشخص کنید تا مشخص شود که هر گره از چه نوعی است.
این موضوع در مثال بعدی (http://barnamenevis.org/forum/showpost.php?p=865662&postcount=22) مطرح خواهد شد.

raziee
پنج شنبه 19 آذر 1388, 20:42 عصر
در مثال قبل (http://barnamenevis.org/forum/showpost.php?p=865425&postcount=21) محتویات یک فایل XML را با LINQ نمایش دادیم اما خروجی آن طور که مد نظر ماست ، نبود. در مثال 19 به رفع نواقص مثال 18 خواهیم پرداخت.
مثال 19 : مشخص کردن نوع عناصر XML با استفاده از LINQ
کد های VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim query = From m In XElement.Load(MapPath("Movies.xml")).Elements("Movie") _
Select New Movie With { _
.Title = CStr(m.Element("Title")), _
.Director = CStr(m.Element("Director")), _
.Genre = CInt(m.Element("Genre")), _
.ReleaseDate = CDate(m.Element
("ReleaseDate")), _
.Runtime = CInt(m.Element("Runtime")) _
}
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#
protected void Page_Load(object sender, EventArgs e)
{
var query = from m in XElement.Load(MapPath("Movies.xml")).Elements("Movie")
select new Movie {
Title = (string)m.Element("Title"),
Director = (string)m.Element("Director"),
Genre = (int)m.Element("Genre"),
ReleaseDate = (DateTime)m.Element("ReleaseDate"),
RunTime = (int)m.Element("RunTime")
};
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
همانطور که می بینید ، ما در پرس و جو تغییراتی ایجاد کردیم تا به LINQ بفهمانیم که نوع داده های هر گرده چه چیزی است.
توجه داشته باشید که در این روش تمام فایل XML بارگذاری می شود بنابراین ، این ایده ی خوبی نیست که یک فایل حجیم XML را با این روش بارگذاری کنید.

raziee
سه شنبه 24 آذر 1388, 13:58 عصر
join دادهای XML با استفاده از LINQ
LINQ در XML همانند LINQ در Object از گروه بندی و فیلتر سازی داده ها پشتیبانی میکند. علاوه بر آن LINQ در XML از joining داده ها پشتیبانی میکند و درواقع شما میتوانیید دو سند XML را با هم ترکیب کنید کاری که بدون استفاده از LINQ شاید سخت باشد.
به کد های زیر نگاه کنید ، join کردن در XML همانند join کردن در Object ها میباشد.در مثال قبلی تنها شماره ی مربوط به ژانر فیلم ها در خروجی نمایش داده میشد ، اما بهتر است که ما نام هر ژانر را در خروجی نمایش دهیم.
مثال زیر فایل XML مربوط به اطلاعات ژانر ها است.

مثال 20 : فایل XML ژانر ها
کد های XML:
<?xml version="1.0" encoding="utf-8" ?>
<Genres>
<Genre>
<ID>0</ID>
<Name>Comedy</Name>
</Genre>
<Genre>
<ID>1</ID>
<Name>Drama</Name>
</Genre>
<Genre>
<ID>2</ID>
<Name>Action</Name>
</Genre>
</Genres>
برای join کردن هر دو این فایل ها شما باید از پرس و جوی join استفاده کنید که در مثال زیر آورده شده است.

مثال 21 : join دادهای XML با استفاده از LINQ:
کد های VB.NET :
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim query = From m In XElement.Load(MapPath("Listing9-18.xml"))
.Elements("Movie") _
Join g In XElement.Load(MapPath("Listing9-21.xml")).Elements
("Genre") _
On CInt(m.Element("Genre")) Equals CInt(g.Element("ID")) _
Select New With { _
.Title = CStr(m.Element("Title")), _
.Director = CStr(m.Element("Director")), _
.Genre = CStr(g.Element("Name")), _
.ReleaseDate = CDate(m.Element("ReleaseDate")), _
.Runtime = CInt(m.Element("RunTime")) _
}
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎ :
protected void Page_Load(object sender, EventArgs e)
{
var query = from m in XElement.Load(MapPath("Movies.xml")).Elements("Movie")
join g in XElement.Load(MapPath("Genres.xml")).Elements("Genre")
on (int)m.Element("Genre") equals (int)g.Element("ID")
select new {
Title = (string)m.Element("Title"),
Director = (string)m.Element("Director"),
Genre = (string)g.Element("Name"),
ReleaseDate = (DateTime)m.Element("ReleaseDate"),
RunTime = (int)m.Element("RunTime")
};
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
در این مثال شما می بینید از متد XElement.Load استفاده کردیم که به عنوان بخشی از بدنه کد های LINQ است تا فایل مربوط به ژانر فیلم را بارگذاری کند.
هنگامی که اطلاعات با هم join میشوند شما میتوانید هم به عناصر فیلم و هم به عناصر ژانر دسترسی داشته باشید.

»» از پست بعدی به سراغ LINQ به SQL خواهیم رفت.(قابل توجه دوستانی که برام پیغام میگذاشتند تا این موضوع رو شروع کنم.)

raziee
سه شنبه 01 دی 1388, 14:24 عصر
LINQ به SQL

مقدمه ای بر LINQ به SQL

LINQ به SQL به عنوان سومین و آخرین نوع از LINQ در این آموزش است. LINQ به SQL همانطور که از نامش مشخص است ، شما را قادر میسازد تا از منابع داده ای مبتنی بر SQl نظیر SQL Server2005 به آسانی و با سرعت پرس و جو تهیه کنید. همانند انواع دیگر LINQ ، LINQ به SQL نیز در حال توسعه در دات نت است. این ساختار در حال حاظر در کتابخانه ی System.Data.Linq قرار دارد.
علاوه بر اپراتور هایی که تا کنون از LINQ فرا گرفته اید در ویژوال استادیو 2008 شئی برای ارتباط مستقیم (Object Relation به اختصار (O/R) ) SQL و LINQ ایجاد شده است. این O/R به شما کمک می کند تا منبع داده ای مبتنی بر SQL که قرار است برای پرس و جو گیری از LINQ استفاده شود را سریع ایجاد کنید. این ساده ترین راه برای شروع به استفاده و پیاده سازی SQL در LINQ است.
برای پیاده سازی SQL در LINQ شما باید یک فایل " Linq to SQL Classes" را به پروژه ی خود اضافه کنید. فایل Linq to SQL Classes به شما اجازه میدهد تا به آسانی و به صورت بصری ، بستری برای داده ها بسازید تا بتوانید به آن ها دسترسی داشته باشید و از آن ها پرس و جو تهیه کنید.
بعد از کلیک بر روی دکمه ی "OK" در کادر محاوره "Add New Items" برای اضافه کردن این فایل برای پروژه ی خود ، ویوژوال استادیو این فایل را در پوشه ی "App_Code" اضافه میکند. بعد از اضافه کردن فایل "LINQ to SQL Classes" در پوشه ی مربوطه شما میتوانید در هر کجای پروژتون که تمایل دارید به آن دسترسی داشته باشید.
هنگامی که این فایل به پروژه ی شما اضافه شود ویژوال استادیو به صورت خودکار حالت گرافیکی "LINQ to SQL" را برای شما باز میکند. این شیء O/R ساده ابزاری هایی دارد که شبه کمک آن ها شما قادر خواهید بود داده های مربوطه را ایجاد ، ویرایش ، حذف و یا بین آنها ارتباط برقرار کنید. هنگامی که شما در حالت طراحی این تغییرات را بر روی داده هایتان انجام میدهید "LINQ to SQL" کد کلاس اشیائی را که ساختار همان اشیاء شما هستند را تولید میکند. بعد ها زمانی که آماده اید برای نوشتن پرس و جوهای LINQ بر روی اشیاء داده ها این کلاس ها به ویژوال استادیو اجازه میدهند تا در زمان طراحی از Intellisense پشتیبانی کند تا کدهایی قوی داشته باشید و زمان کامپایل ، نوع داده ها را چک کند. از آنجا که O/R در درجه ی اول برای استفاده LINQ to SQL طراحی شده است ، ایجاد بازنمود های CRL اشیائ SQL (نظیر Tables ، Views و Stored Procedures) بسیار آسان تر شده است.
با استفاده از LINQ to SQL ما میتوانیم همان مثال Movie خود را در این بخش پیاده سازی کنیم. در این بخش داده ها بر روی پایگاه داده SQL Server Express ذخیره میشوند.

در پست بعدی نحوه انجام این کار توضیح داده خواهد شد.

raziee
چهارشنبه 09 دی 1388, 13:44 عصر
بعد از باز کردن حالت گرافیکی اکسپلورر سرور (Server Explorer) ویژوال استادیو ، پایگاه داده Movies و پوشه های جداول قابل مشاهده است. از این پنجره (Server Explorer) جدول Movies را به داخل LINQ to SQL Classes درگ میکنیم. توجه کنید که بلافاصله بعد از درگ کردن ، به صورت خودکار مشخصات جدول شناسایی شده و کلاس های مربوط به آن ایجاد میشود و در حالت گرافیکی به شما نمایش داده می شود.
هنگامی که شما جدول را به داخل " LINQ to SQL" درگ میکنید ، اگر لازم باشد ویژوال استادیو به بررسی نام اشخاص می پردازد و به صورت خودکار نام کلاس را ایجاد میکند.
این کار به شما در نام گذاری طبق قوائد نام گذاری در دات نت کمک می کند. به عنوان مثال اگر شما جدول Products را از پایگاه داده Northwind به حالت گرافیکی درگ کنید به صورت خودکار نام Product به عنوان نام کلاس ساخته می شود.(آن را از حالت جمع به حالت مفرد تبدیل میکند.)
در حالی که انجام این کار در حالت کلی خوب است اما در به طور 100% درست نیست و ممکن است نام صحیح نباشد )مثلا نام Movies را به جای نوشتن Movie بنویسد (Movy. خوشبختانه شما این اجازه را دارید که این نام را تغییر دهید. شما میتوانید به راحتی و با کلیک بر روی نام ، آن نام را ویرایش کنید.
بعد از اضافه کردن موجودیت Movie ، جدول Genres را درگ کنید. ویژوال استادیو دوباره یک نماینده از از این جدول تولید میکند.(آن را به نام Genre که مفرد است تغییر میدهد.) علاوه بر این ، وجود کلید خارجی بین Movie و Genre را تشخیص داده و یک فلش نقطه چین بین آن دو ایجاد میکند. این فلش نشان دهنده ی ارتباط کلید خارجی دو جدول و جهت آن است.
اکنون که شما یک فایل LINQ to SQL تنظیم شده دارید ، به راحتی میتوانید به داده های context دسترسی داشته باشید و پرس و جو تهیه کنید.
برای شروع شما نیاز به ایجاد یک نمونه ی جدید از data context دارید. در اینجا من آن را در یک صفحه ی ASP.NET ایجاد کردم.
مثال 22 : ایجاد یک data context جدید
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dc As New MoviesDataContext()
End Sub
کد های C#
protected void Page_Load(object sender, EventArgs e)
{
MoviesDataContext dc = new MoviesDataContext();
}
در این ایجا ما یک نمونه از MoviesDataContext ایجاد کرده ایم که نام کلاس data context است که قبلا در فایل LINQ to SQL آن را ایجاد کرده بودیم.
بعد از ایجاد یک MoviesDataContext جدید ، شما میتوانید شروع به نوشتن LINQ کنید. همانطوز که اشاره شد ، به دلیل آنکه LINQ to SQL یک کلاس اشیاء به صورت آینه وار از ساختار جداول پایگاه داده میسازد ، شما میتوانید پشتیبانی Intellisense را در پرس و جو های LINQنوشته شده ، داشته باشید. مثال 23 همان نمایش اطلاعات فیلم هاست که اینبار با استفاده از پایگاه داده پیاده سازی شده است.
مثال 23 : پرس و جو گرفتن از داده های فیلم در LINQ to SQL
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dc As New MoviesDataContext()
Dim query = From m In dc.Movies _
Select m
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#
protected void Page_Load(object sender, EventArgs e)
{
MoviesDataContext dc = new MoviesDataContext();
var query = from m in dc.Movies
select m;
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}
توجه کنید که آیا ما مجبوریم کد های دسترسی به پایگاه داده را بنویسیم؟ همانطو که قبلا(بدون LINQ to SQL) مجبور بودیم برای دسترسی به پایگاه داده در پروژه کد بنویسیم!

Hossein Bazyan
دوشنبه 06 اردیبهشت 1389, 23:18 عصر
سلام

با تشکر از جناب raziee و با اجازه از ایشان من همه مطالب این تاپیک رو جمع آوری نموده و در یک فایل PDF نوشتم و جهت استفاده سایر دوستان همینجا آپلود میکنم . البته تا انتهای پست 24 میباشد که به محض اضافه شدن مطالب آنها را نیز اضافه میکنم .
در ضمن من فقط کدهای VB رو نوشتم :خجالت:
در آخر اینکه اگر جناب raziee راضی نباشند این پست را پاک میکنم .

raziee
شنبه 09 مرداد 1389, 10:01 صبح
با سلام.


آقا رضا دستت درد نکنه
خیلی حال دادی
فقط یه چیزی آموزش تموم شد ؟؟
دیگه این تاپیک آپ نمیشه ؟؟
بنده رضیئی هستم.
آموزش این تاپیک به اتمام نرسیده.
بنده درگیر کارهای شخصی هستم و متاسفانه وقت کافی ندارم.
در اولین فرصت برای تکمیل این آموزش اقدام میکنم.

با تشکر از جناب majid325 مدیر این بخش که به این تاپیک توجه ویژه ای داشتند و پست های غیر مرتبط رو حذف میکردند.

به عنوان یک نمونه خوب برای فراگیری LINQ دیدن مثال های لینک زیر رو پیشنهاد میکنم.
http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

شاد باشید.

raziee
دوشنبه 18 مرداد 1389, 17:42 عصر
برای یک نمونه ی آموزشی برای نحوه ی استفاده از LINQ to SQL در معماری چند لایه ، گریدویو جناب راد (http://barnamenevis.org/forum/showthread.php?t=50594) رو با LINQ در این تاپیک (http://www.barnamenevis.org/forum/showthread.php?t=238682) نوشتم.
امیدوارم به فراگیری دوستان کمک کنه.

raziee
جمعه 12 شهریور 1389, 21:01 عصر
توجه داشته باشید که ما برای تولید این صفحه نیاز به نوشتن هیچگونه کدی برای دسترسی به پایگاه داده نداریم.
LINQ این کار را از دوش ما برداشته و کدهای SQL را تولید میکند.
شما میتوانید ایجاد شده توسط LINQ برای پرس و جو را در پنجره ی output در ویژوال استادیو ملاحظه کنید.(برای نمایش این پنجره از مسیر View>Output و یا کلید های ctrl+w+o اقدام کنید)
مثال 24 : نوشتن پرس و جوی LINQ به SQL در پنجره ی Output
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dc As New MoviesDataContext()
Dim query = From m In dc.Movies _
Select m
System.Diagnostics.Debug.WriteLine(query)
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎
protected void Page_Load(object sender, EventArgs e)
{
MoviesDataContext dc = new MoviesDataContext();
var query = from m in dc.Movies
select m;
System.Diagnostics.Debug.WriteLine(query);
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}

حالا شما میتوانید متن زیر را در قسمت debug پنجره ی Output ملاحظه کنید.


SELECT [t0].[Title], [t0].[Director], [t0].[Genre], [t0].[RunTime], [t0].[ReleaseDate]
FROM [dbo].[Movie] AS [t0]


همانطور که می بینید ، کدهای SQL تولید شده برابر با سینتکس استاندارد SQL هستند و LINQ کدهای بهینه را تولید میکند ، حتی برای پرس و جو های پیچیده تر مانند گروه بندی داده ها نیز کد های تولید شده بهینه هستند.

مثال 9-26 : گروه بندی داده ها توسط LINQ به SQL
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dc As New MoviesDataContext()
Dim query = From m In dc.Movies _
Group By m.Genre Into g = Group, Count()
System.Diagnostics.Debug.WriteLine(query)
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub
کد های C#‎‎

protected void Page_Load(object sender, EventArgs e)
{
MoviesDataContext dc = new MoviesDataContext();
var query = from m in dc.Movies
group m by m.Genre into g
select new { Genre = g.Key, Count = g.Count() };
System.Diagnostics.Debug.WriteLine(query);
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}

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

SELECT COUNT(*) AS [Count], [t0].[Genre]
FROM [dbo].[Movie] AS [t0]
GROUP BY [t0].[Genre]
همانطور که ملاحظه میکنید کدهای تولید شده برای SQL Server بهینه هستند.
------------------------------------------------------------------------------------
پاورقی : با پوزش به خاطر تاخیر در ادامه روند آموزش.
لطفا برای درک بهتر مطالب نوشته های پیشین را دنبال کنید.

raziee
شنبه 20 شهریور 1389, 16:06 عصر
سلام
با تشكر از مقاله خوبتون ببخشيد من با Update كردن محتويات جدولم با دستوات Linq مشكل دارم . كتاب Linq For Visual stedio نشر ناقوس رو خوندم ، توي فروم ها سرك كشيدم ، سايت هاي آموزشي به زبان انگليسي از جمله CodeProject رو ديدم ولي ديگه واقعاً نمي دونم چي كار كنم مشكلم اينه كه با اجراي دستورات تغيير هيچ تغييري داده نمي شود و هيچ خطايي هم نمي گيرد . لطفاً كمك كنيد .
سلام. لطف دارین.
من در این لینک یک نمونه ی کار با دیتابیس SQL رو گذاشتم. در پست های قبلی هم لینکش رو گذاشته بودم.
اون رو مطالعه بکنید اگر سوالی بود در همون تاپیک بپرسید.
http://www.barnamenevis.org/forum/showthread.php?t=238682

Vahid_moghaddam
دوشنبه 20 دی 1389, 20:26 عصر
با تشکر از آقای رضیئی
در پست شماره 17 گروه بندی داده ها آموزش داده شد. در این پست با ذکر یک مثال گروه بندی داده ها بر اساس چند مشخصه نمایش داده می شه.
فرض کنید کلاسی داریم برای معرفی کالا. یک نمونه از تعریف این کلاس می تونه به شکل زیر باشه:


class Asset
{
public int ID {get;set;}
public string Model {get;set;}
public string TeqnicalNo {get;set;}
public int Quantity {get;set;}
public int Remain {get;set;}
public string Name {get;set;}
}

در این کلاس تعداد کالا در Quantity و باقی مانده کالا (مثلا در انبار) در Remain نگهداری می شه. در یک مساله واقعی این کلاس در ارتباط با جدولی مشابه در پایگاه داده هست. هدف اینه که می خوایم برای هر مدل و شماره فنی، مجموع باقی مانده رو بدست بیاریم. برای این کار لازمه داده ها رو بر اساس Model و TeqnicalNo گروه بندی کنیم. اگه داده ها در یک لیست ژنریک از Asset باشند:


List<Assets> AssetList = GetAssetsFromDatabase();

گروه بندی رو به شکل زیر انجام می دیم:


var result = from asset in AssetList
group asset by new
{

q.Model,
q.TeqnicalNo,

} into g
select new
{

Model = g.Key.Model,
TeqnicalNo = g.Key.TeqnicalNo,
REMAIN = g.Select(p => (int)p.Remain).Sum(),
AssetGroup = g.ToList()
};

sima_2n5k
یک شنبه 17 بهمن 1389, 15:29 عصر
سلام خسته نباشید
من میخوام دیتاکانتکست از سرویس به UI برگردونم ولی با پیغام خطا serialization بهم میده،بخاطر همین من خواستم serialize کنمش ولی type دیتاکانتکست و نمیشناسه!
نمیدونم چیکار کنم؟

Itist82
شنبه 19 شهریور 1390, 20:53 عصر
سلام
من کدي شبيه زير نوشتم:

DataClassesDataContext db = new DataClassesDataContext();
var q = (from p in db.Messages
where p.Message_Id == Convert.ToInt16(Request.QueryString["ID"])
select p).Single();
q.ReadMessage = "yes";
db.SubmitChanges();



اما در خطي که تابع Single وجود داره ازم خطا مي گيره که:
Specified cast is not valid.

در واقع توي کل پروژه من فقط Insert ها با دستورات Linq کار مي کنن و بقيه مثل آپ ديت و کوئري براي خوندن اطلاعات کار نمي کنن و هميشه همين خطا رو مي ده.
ديگه واقعا نمي دونم چه کار کنم.:ناراحت::افسرده:
يه بار هم با ابزار ويژوالي يعني ايجاد فايل dbml سعي کردم آپ ديت انجام بدم که اونجا کار کرد و انجام داد. ولي واقعا دلم مي خواد بدونم کجاي کار من ايراد داره که کد من اجرا نمي شه:متفکر:

reza344
دوشنبه 28 شهریور 1390, 22:13 عصر
Convert.ToInt16(Request.QueryString["ID"])

سلام
این تبدیل رو قبل از کوئری انجام بده ببین مشکلت حل میشه ؟

samadblaj
دوشنبه 14 فروردین 1391, 11:58 صبح
سلام جناب raziee واقعا خسته نباشید . ببخشید این آموزش ها برای برنامه های win هست یا web asp؟ رو win form کار میکنند.

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

raziee
دوشنبه 14 فروردین 1391, 12:31 عصر
با سلام.

ببخشید این آموزش ها برای برنامه های win هست یا web asp؟ رو win form کار میکنند.
LINQ محدود به وب یا ویندوز نیست.
محدود به کار با دیتابیس هم نیست.
شما میتونید بر روی یک لیست یا یک فایل XML و ... کوئری هایی را بوسیله ی LINQ بنویسید.

sarahjoon
دوشنبه 04 اردیبهشت 1391, 01:57 صبح
سلام
با وجود ذخيره كانكشن استرينگ در appconfig آيا براي اتصال در linqباز هم نياز هست كه كانكشن استرينگ رو در برنامم تعريف كنم؟ من با linq كار ميكنم و الان دچار مشكل شدم و هر بار كه از برنامه اجرا ميگيرم اطلاعات به جاي اطلاعات قبلي ذخيره ميشه؟ وبراي گزارشگيري از stimul report استفاده ميكنم اما داده هاي جدولم در گزارش نمايش داده نميشه و فقط هدر نمايش داده ميشه ؟ دوستاني كه با linq كار مي كنند اگه امكان داره مشكل من رو بر طرف كنند
با تشكر

samadblaj
چهارشنبه 06 اردیبهشت 1391, 00:25 صبح
ببخشید میشه یه پروژه ساده از LinQ توی C#‎ بیارید؟

karbord83
جمعه 22 اردیبهشت 1391, 21:49 عصر
یک وبلاگ برای علاقمندان به کار با دیتابیس به خصوص SQLserver
(http://www.karbord83.blogfa.com/cat-7.aspx)

yosefi1988
چهارشنبه 27 اردیبهشت 1391, 23:24 عصر
یک دنیا تشکر
خیلی به این آموزش احتیاج داشتم

واقعا دست همتون دردنکنه :تشویق:

senaps
جمعه 29 اردیبهشت 1391, 03:06 صبح
سلام...
اقا من کوری گرفتن با لینک رو بلدم...ولی اینا رو باید کجا نوشت؟! ارتباط با دیتابیس چی میشه؟ اینا رو کی و کجا باید نوشت؟

اقا کسی جواب نداشت؟!!! اینو دارم بعد از یه هفته ویرایش میکنم:
مثلا من یه جدول دارم که ID,User,Pass داره....
میخوام بعد از زدن باتن، دیتای دو تا تکست باکس توی این دو فیلد ثبت بشه....کسی کمک میکنه؟! کدها و مثال هایی که دادین برا تو ASP هستش....

pedramfj
یک شنبه 01 مرداد 1391, 16:16 عصر
سلام
بعد از نمایش اطلاعات در دیتاگرید شما می توانید عملیات درج و حذف و ویرایش را بدون کد نویسی درون دیتاگرید انجام دهید و بر روی بانک اطلاعاتی خود ذخیره کنید
دانلود : 90087
امیدوارم مفید باشه...

malloc
پنج شنبه 05 مرداد 1391, 15:38 عصر
یجورایی منم همین سوالو دارم.

سواله من اینه که وقتی linq to sql مینویسم چطور کاربر و لاگین کنم.یعنی ما تو sql با SqlDataReader اینکارو میکردیم که میفهمیدیم کاربر هویت داره یا نه.اما نمیدونم وقتی میخوام linq to sql کار کنم چطور بنویسم.

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

masoud_z_65
شنبه 25 شهریور 1391, 18:28 عصر
دوستان یه سوال:
من 3 تا entity به اسم های: f1 f2 f3 دارم
که f2 موجودیت میانی برای دسترسی f1 و f3 می باشد
حالا به دستورات لینک میخوام از طریق f1 به f3 هم دسترسی داشته باشم یکی میتنوه کمکک کنه؟
چجوری باید Join بزنم؟

samadblaj
شنبه 25 شهریور 1391, 21:29 عصر
دوستان یه سوال:
من 3 تا entity به اسم های: f1 f2 f3 دارم
که f2 موجودیت میانی برای دسترسی f1 و f3 می باشد
حالا به دستورات لینک میخوام از طریق f1 به f3 هم دسترسی داشته باشم یکی میتنوه کمکک کنه؟
چجوری باید Join بزنم؟

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

soltani_ce
پنج شنبه 25 آبان 1391, 14:44 عصر
سلام
این روشیه که من تو پروژها استفاده می کنم...
شما یایستی یک DataContext درست کنی همان کلاسی که به دیتا بیس اشاره داره. بعد از جدول مورد نظرت بصورت (کلاس و فیلد) استفاده کنی :
این هم در نظر داشته باش که به ازای هر جدول یک کلاس Partial به برنامه ات اضافه می شود.
این کد رو داخل رویداد کلیک یک باتن بنویس.

DataContext db= New DataContex()
Student Stu = new Student();
Stu.User=textbox1.text;
stu.pass=textbox2.text;
db.InsertOnSubmite(stu);
db.submitChange();

aliyan_mm
چهارشنبه 15 آذر 1391, 12:15 عصر
سلام دوستان
sql 2008 یک داده جدید به نام Hierarchical داره که برای نگهداری داده های سلسله مراتبی مثل tree view ازش استفاده می شه . سوالم اینجاست که وقتی جدولی دارای فیلدی با این نوع داده باشه و بخوای جدولو درگ کنی داخل محیط linq خطا می ده :

"On or more selected items contain a data type that is not supported by the designer"
می گه این نوع داده توسط لینکیو پشتیابنی نمی شه !!!

در اصل به چه طریقی می توان از Hierarchical در linq to sql استفاده کرد ؟ بنده جداول پایگاهم رو داخل خود ویژوال استادیو 2010ساخته ام .

Hamid Reza Rahimi
دوشنبه 20 آذر 1391, 17:42 عصر
به نام خدا
سلام ببینید در این این لینک به جوابتون میرسید ؟
http://ken-coder.blogspot.com/2009/10/ms-sql-2008-hierarchyid-in-linq-to-sql.html

Hamid Reza Rahimi
دوشنبه 20 آذر 1391, 17:44 عصر
سلام دوستان
sql 2008 یک داده جدید به نام Hierarchical داره که برای نگهداری داده های سلسله مراتبی مثل tree view ازش استفاده می شه . سوالم اینجاست که وقتی جدولی دارای فیلدی با این نوع داده باشه و بخوای جدولو درگ کنی داخل محیط linq خطا می ده :

"On or more selected items contain a data type that is not supported by the designer"
می گه این نوع داده توسط لینکیو پشتیابنی نمی شه !!!

در اصل به چه طریقی می توان از Hierarchical در linq to sql استفاده کرد ؟ بنده جداول پایگاهم رو داخل خود ویژوال استادیو 2010ساخته ام .

به نام خدا
سلام ببینید در این این لینک به جوابتون میرسید ؟
http://ken-coder.blogspot.com/2009/10/ms-sql-2008-hierarchyid-in-linq-to-sql.html

pr0tector
چهارشنبه 29 آذر 1391, 23:39 عصر
سلام
دوستان بنده یه مقاله چند صفحه ای آماده کردم که Linq To Sql رو آموزش میده + یک مثال برای
اضافه کردن ، بروزرسانی،حذف،جستجو،نمایش هست.
امیدوارم مفید باشه
لطفا دوستان نظرات خودشون رو بگن
ممنون
http://code-project.ir/download_linq_c_eduaction_pdf/

mdssoft
پنج شنبه 12 بهمن 1391, 13:51 عصر
کتاب آموزش جامع LINQ نوشته علی اقدم (http://www.topinearth.com/Fa/21/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-LINQ-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B9%D9%84%DB%8C-%D8%A7%D9%82%D8%AF%D9%85-%D8%A8%D9%87%D8%A7%D8%B1-90) هم از منابعی هست که می تونید برای مطالعه بیشتر ازش استفاده کنید

intel_amd
جمعه 04 اسفند 1391, 01:09 صبح
جایگزین کردن LINQ به جای روش های سنتی
LINQ برای از بین بردن کاستی هایی است که در پرس و جو های قبلی دیدیم. به جای آنکه شما برای رسیدن به هدفتون(پرس و جوهای پیچیده) منابع زیدی رو درگیر کنید و همچنین کدهای زیادی را بنویسید میتوانید از LINQ استفاده کنید. LINQ به شما قدرت میدهد تا به سادگی به آن چیزی که از یک پرس و جو میخواهید برسید بدون آنکه خود را درگیر کنید. دات نت و کامپایلرش تمام کار ها را انجام میدهند و پرس و جو را اجرا میکنند.
در این پست نگاهی به LINQ داریم و خواهیم دید که چگونه با استفاده از آن میتوان نمایش داده ها را بسیار ساده کرد.
برای درک سادگی کار ، ما همان مثال های قبلی را که بدون استفاده از LINQ با حجم کد بالا و استفاده از منابع دیگر نوشتیم ، این بار با استفاده از LINQ خواهیم نوشت و خواهیم دید که استفاده از LINQ چگونه باعث آسان تر شده کار ما شد.
پایه و اساس پرس و جو های LINQ
برای استفاده از LINQ باید کتابخانه ی مربوطه را به برنامه ی خود اضافه کنید. این کتابخانه در آدرس زیر قرار دارد:

اضافه کردن فضا نام LINQ

using System.Linq;

اضافه کردن این فضای نام امکان دسترسی به تمام عملکرد LINQ را میدهد.
حالا می توانیم با تغییر کدهای مثال 2 شروع کنیم.
اگر به یاد داشته باشید ، در آن مثال ما یک نمونه از لیست عمومی فیلم ها را ایجاد و آن را به کنترل گرید ویو متصل کردیم.
مثال 5 چگونگی تغییر کد ها را با استفاده از LINQ و نمایش اطلاعات آن را در یک گریدویو نشان میدهد.
مثال 5 : ایجاد پرس و جو با LINQ
کد های VB :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim query = From m In movies _
Select m
Me.GridView1.DataSource = query
Me.GridView1.DataBind()
End Sub

کد های C-Sharp :

protected void Page_Load(object sender, EventArgs e)
{
var movies = GetMovies();
var query = from m in movies
select m;
this.GridView1.DataSource = query;
this.GridView1.DataBind();
}

مثال بالا به سه قسمت تقسیم می شود.

ابتدا : کد های استفاده شده برای بدست آوردن لیست فیلم ها »» GetMovies()
سپس : کد های استفاده شده برای ایجاد یک پرس و جوی بسیار ساده LINQ به منظور اتنخاب تمام اطلاعات لیست فیلم ها
در انتها : اتصال query به گریدویو برای نمایش اطلاعات مورد نظر
توجه داشته باشید که LINQ از کلمات کلیدی خاصی همچون from و یا select در یک پرس و جو استفاده میکند.
در Visual Studio 2008 امکاناتی اضافه شده که خطاهای نوشتاری LINQ را به کاربر گزارش می دهد و شما میتوانید خطا های پرس و جو های نوشته شده را به راحتی پیدا کنید و آن ها را رفع کنید.
در پرس و جو متغیر جدید m تعریف شده است. (نام این متغییر همانند نام تمام متغیر ها انتخابی است.)این متغیر در پرس و جو ها دو کاربرد دارد.
کاربرد اول : به عنوان منبعی که پرس و جو بر روی آن گرفته شده و بعد از کلمه کلیدی from آورده میشود.(همانند نام جدول در دستورات SQL) که در این مورد به مجموعه ی فیلم ها اشاره می کند. (در مثال 5 ملاحظه کنید)
کاربرد دوم : در قسمت select یک پرس و جو استفاده میشود و هدف آن انتخاب ستون ها برای نمایش در خروجی است. (در پست بعد (http://barnamenevis.org/forum/showpost.php?p=862754&postcount=12) ملاحظه خواهید کرد.)

هر کار می کنم این کار نمیکنه !

kablayi
جمعه 25 اسفند 1391, 02:37 صبح
یجورایی منم همین سوالو دارم.

سواله من اینه که وقتی linq to sql مینویسم چطور کاربر و لاگین کنم.یعنی ما تو sql با SqlDataReader اینکارو میکردیم که میفهمیدیم کاربر هویت داره یا نه.اما نمیدونم وقتی میخوام linq to sql کار کنم چطور بنویسم.

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





string username = txtusername.Text;
string pass = txtpass.Text;
var db = new myclasslinqDataContext();
var query = db.tbl_users.Where(c => c.UName ==username && c.password ==pass)
if (query.count()==0)
{
MessageBox.Show("Invalid username and password");
}
else
{
// Log in Transactions
}

HAMRAHSOFT.IR
جمعه 27 اردیبهشت 1392, 22:36 عصر
سلام
ببخشید اشکال این کد حذف کجاست


var DELETE = from h in Amomi.con.Tbl_Companies where h.CompanyID == int.Parse(txtCompanyID.Text) select h;
Amomi.con.Tbl_Companies.DeleteAllOnSubmit(DELETE);
Amomi.con.SubmitChanges();

علی فتحی
یک شنبه 16 تیر 1392, 02:00 صبح
ممنون ارتاپیکی که گذاشتید.من نمیخواستم تاپیک جدید ایجاد کنم بنابراین سوالمو اینجا مطرح میکنم شاید سوال خیلی یا باشه
نجوه گزارش گیری با کریستال رپورت در تکنولوژی جدید LINQرو توضیح دهید.
با تشکر

علی فتحی
جمعه 21 تیر 1392, 03:30 صبح
لطفا نحوه پشتیبان گیری و بازیابی اطلاعات رو هم فراموش نکنید متشکریم

علی فتحی
سه شنبه 01 مرداد 1392, 01:24 صبح
چراتعطیل شد

yasmohamadi
شنبه 11 آبان 1392, 13:14 عصر
سلام دوست گرامی
لینک باز نمی شه اگه می تونی یک لینک دیگه قرار بدهید ممنون می شم .

yasmohamadi
شنبه 11 آبان 1392, 13:19 عصر
سلام
دوستان بنده یه مقاله چند صفحه ای آماده کردم که Linq To Sql رو آموزش میده + یک مثال برای
اضافه کردن ، بروزرسانی،حذف،جستجو،نمایش هست.
امیدوارم مفید باشه
لطفا دوستان نظرات خودشون رو بگن
ممنون
http://code-project.ir/download_linq_c_eduaction_pdf/


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

t3.nano
سه شنبه 19 آذر 1392, 19:47 عصر
پیوند در LINQ
LINQ همچنین از unioning داده ها از مجموعه های مختلف پشتیبانی میکند. (چیزی شبیه به join در SQL)
برای مثال : در داده هایی که ما تا کنون از آن ها پرس و جو تهیه کردیم تنها قادر بودند ژانر فیلم ها به صورت کد عددیشان نشان دهند. به وسیله "پیوند" میتوانیم در خروجی نام هر ژانر را به جای کد عددیشان نمایش دهیم.
چنین کاری در LINQ به راحتی امکانپذیر است.
برای انجام چنین کاری یک کلاس با نام Genre ایجاد خواهیم کرد.
مثال 13 : کلاس ژانر
کد های VB.NET

Public Class Genre
Private _id As Integer
Private _name As String
Public Property ID() As Integer
Get
Return _id
End Get
Set(ByVal value As Integer)
_id = value
End Set
End Property
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
End Class
کد های C#‎‎
public class Genre
{
public int ID { get; set; }
public string Name { get; set; }
}
حالا شما باید متد GetGenres را به کد هایتان اضافه کنید تا لیست ژانر ها را برگرداند.

مثال 14 : برگرداندن مجموعه ی ژانر ها
کد های VB.Net
Public Function GetGenres() As List(Of Genre)
Dim genres As Genre() = { _
New Genre With {.ID = 0, .Name = "Comedy"}, _
New Genre With {.ID = 1, .Name = "Drama"}, _
New Genre With {.ID = 2, .Name = "Action"} _
}
Return New List(Of Genre)(genres)
End Function
کد های C#‎‎
public List<Genre> GetGenres()
{
return new List<Genre> {
new Genre { ID=0, Name="Comedy" } ,
new Genre { ID=1, Name="Drama" } ,
new Genre { ID=2, Name="Action" }
};
}
سرانجام شما باید رویداد Page Load را به صورت زیر تغییر رهید. این رویداد شامل یک پرس و جو برای برگرداندن لسیت ژانر ها و پیوند آن با لیست فیلم ها است. این تغییرات را در مثال 15 نشان داده شده است.
مثال 15 : پیوند لیست ژانر و لیست فیلم با استفاده از LINQ
کد های VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim movies = GetMovies()
Dim genres = GetGenres()
Dim query = From m In movies Join g In genres _
On m.Genre Equals g.ID _
Select New With {.Title = m.Title, .Genre = g.Name}
GridView1.DataSource = query
GridView1.DataBind()
End Sub
کد های C#‎‎

همانطور که در مثال بالا میبینید نحوه ی پیوند دو لیست نسبتا ساده است.
سلام، تشکر از مطالب خوبتون
کد #C این مطلب نیومده، یعنی نیست!!!

koshan
یک شنبه 20 بهمن 1392, 23:55 عصر
void display()

{

SqlConnection con1 = new SqlConnection();

con1.ConnectionString = @"Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\Book.mdf;Integrat ed Security=True; User Instance=True";

SqlDataAdapter da = new SqlDataAdapter("select * from books", con1);

DataSet ds = new DataSet();

da.Fill(ds, "books");

dataGridView1.DataSource = ds.Tables["books"].DefaultView;

con1.Close();



}

سلام خدمت دوستان عزيزم
من ميخواستم كد بالا كه نمايش فيلد هاي جدول books درون dataGridView هست رو با linq بنويسم كه ديگه نيازي به تعريف sqlconnection نباشه،آيا امكانش هست ؟؟

sara_traveler
چهارشنبه 30 بهمن 1392, 13:04 عصر
بله میتونید به راحتی اطلاعات جدولتونو داخل گرید نمایش بدید

dataGridView1.DataSource =db.books.tolist()
و بسیار روش سریع تر و بهتری هست
و تمام خطاهای اسکیول میشه هنگام کد نویسی رفع کرد
و این باعث بالا رفتن سرعت در ایجاد برنامه میشه

intel_amd
سه شنبه 06 مهر 1400, 14:44 عصر
سلام , linq فقط کار select در sql را انجام می دهد؟ یعنی کار delete و update را کلا با linq نمیشه انجام داد؟!