دانلود نمونه سورس کد LINQ to Objects در زبان VB.NET در موضوع دفترچه تلفن
در دنیای برنامه‌نویسی، LINQ (Language Integrated Query) یک ابزار قدرتمند و انعطاف‌پذیر است که به برنامه‌نویسان اجازه می‌دهد تا داده‌ها را به صورت مستقیم، ساده و خوانا بر روی مجموعه‌های مختلف، به خصوص مجموعه‌های درون حافظه (در اینجا، مجموعه‌های آبجکت‌ها)، پرس و جو کنند. در زبان VB.NET، LINQ به صورت بسیار مؤثری به کار می‌رود و یکی از موارد استفاده مهم آن، ساخت و مدیریت دفترچه تلفن است.
در این مقاله، قصد داریم به صورت کامل و جامع در مورد نمونه سورس کد LINQ to Objects در VB.NET در زمینه دفترچه تلفن صحبت کنیم. این نمونه، نشان می‌دهد که چگونه می‌توان با استفاده از LINQ، عملیات مختلفی مانند افزودن، جستجو، ویرایش و حذف مخاطبین را به راحتی انجام داد؛ آن هم در قالب مجموعه‌ای از آبجکت‌ها که هر کدام نمایانگر یک مخاطب در دفترچه تلفن هستند.

  1. تعریف ساختار داده‌ها


قبل از هر چیز، باید آبجکت‌هایی را تعریف کنیم که اطلاعات هر فرد در دفترچه تلفن را نگهداری می‌کنند. برای این منظور، یک کلاس به نام `Contact` طراحی می‌شود که شامل خصوصیات اصلی مانند نام، شماره تلفن، ایمیل و آدرس است. این کلاس، نقش پایه را در ساخت مجموعه‌های داده بازی می‌کند و تمامی عملیات روی داده‌ها بر اساس این ساختار انجام می‌شود.
```vb.net
Public Class Contact
Public Property Name As String
Public Property PhoneNumber As String
Public Property Email As String
Public Property Address As String
End Class
```

  1. ایجاد مجموعه داده‌ها


در مرحله بعد، یک لیست از اشیاء `Contact` ایجاد می‌کنیم. این لیست به عنوان مخزن داده‌های دفترچه تلفن عمل می‌کند، و می‌تواند شامل چندین مخاطب باشد. در اینجا، مجموعه اولیه با چند نمونه داده پر می‌شود تا بتوان عملیات مختلف را روی آن آزمایش کرد.
```vb.net
Dim contacts As New List(Of Contact) From {
New Contact With {.Name = "Ali Reza", .PhoneNumber = "09121234567", .Email = "ali@example.com", .Address = "Tehran"},
New Contact With {.Name = "Sara Ahmadi", .PhoneNumber = "09211234567", .Email = "sara@example.com", .Address = "Isfahan"},
New Contact With {.Name = "Mehdi Hosseini", .PhoneNumber = "09311234567", .Email = "mehdi@example.com", .Address = "Shiraz"},
New Contact With {.Name = "Narges Moazami", .PhoneNumber = "09411234567", .Email = "narges@example.com", .Address = "Mashhad"}
}
```

  1. جستجو در دفترچه تلفن با LINQ


یکی از قابلیت‌های مهم LINQ، جستجو بر اساس معیارهای مختلف است. فرض کنید می‌خواهیم همه مخاطبانی را که نام آن‌ها شامل "Ali" است پیدا کنیم. این کار با LINQ بسیار ساده است و به صورت زیر انجام می‌شود:
```vb.net
Dim result = From c In contacts
Where c.Name.Contains("Ali")
Select c
```
در این نمونه، `result` مجموعه‌ای از اشیاء `Contact` است که نام آن‌ها حاوی "Ali" است. می‌توان این نتیجه را در حلقه‌ای نمایش داد:
```vb.net
For Each contact As Contact In result
Console.WriteLine($"{contact.Name} - {contact.PhoneNumber}")
Next
```
همچنین، می‌توان عملیات جستجو بر اساس شماره تلفن یا ایمیل انجام داد، و یا حتی چندین شرط را با هم ترکیب کرد، که نشان می‌دهد LINQ چه انعطاف‌پذیری بالایی دارد.

  1. افزودن مخاطب جدید


برای افزودن مخاطب جدید، کافی است یک شیء جدید از کلاس `Contact` ساخته و آن را به لیست اضافه کنیم:
```vb.net
Dim newContact As New Contact With {
.Name = "Hassan Kiani",
.PhoneNumber = "09551234567",
.Email = "hassan@example.com",
.Address = "Tabriz"
}
contacts.Add(newContact)
```
پس از این عملیات، مجموعه داده‌ها به روز رسانی می‌شود و می‌توان مجدد عملیات‌های جستجو یا نمایش را انجام داد.

  1. حذف یک مخاطب


حذف مخاطب نیازمند پیدا کردن آن است، و پس از آن، حذف کردن از لیست. به عنوان نمونه، فرض کنید می‌خواهیم مخاطبی با نام "Sara Ahmadi" را حذف کنیم:
```vb.net
Dim contactToRemove = (From c In contacts
Where c.Name = "Sara Ahmadi").FirstOrDefault()
If contactToRemove IsNot Nothing Then
contacts.Remove(contactToRemove)
End If
```
در اینجا، ابتدا مخاطب مورد نظر پیدا می‌شود، و در صورت وجود، حذف می‌گردد. این عملیات بسیار سریع و کارآمد است، و LINQ به راحتی می‌تواند بر روی مجموعه‌های درون حافظه انجام دهد.

  1. ویرایش اطلاعات مخاطبین


برای ویرایش، باید ابتدا مخاطب مورد نظر را پیدا کنیم، و سپس خصوصیات آن را تغییر دهیم. فرض کنید می‌خواهیم شماره تلفن "Mehdi Hosseini" را به "09871234567" تغییر دهیم:
```vb.net
Dim contactToEdit = (From c In contacts
Where c.Name = "Mehdi Hosseini").FirstOrDefault()
If contactToEdit IsNot Nothing Then
contactToEdit.PhoneNumber = "09871234567"
End If
```
این روش سریع و موثر است، چون تنها کافی است آبجکت مورد نظر را پیدا کنیم و تغییرات لازم را اعمال کنیم.

  1. مرتب‌سازی و گروه‌بندی داده‌ها


LINQ قابلیت‌های پیشرفته‌ای برای مرتب‌سازی و گروه‌بندی دارد. مثلا، برای مرتب‌سازی مخاطبین بر اساس نام، می‌توان از دستور زیر استفاده کرد:
```vb.net
Dim sortedContacts = From c In contacts
Order By c.Name
Select c
```
و برای گروه‌بندی بر اساس شهر:
```vb.net
Dim groupedByCity = From c In contacts
Group By c.Address Into Group
```
این قابلیت‌ها، در کنار عملیات جستجو و فیلتر، امکانات قدرتمندی را برای مدیریت داده‌ها فراهم می‌کنند.

  1. نمونه سورس کامل


در ادامه، یک نمونه کامل و کاربردی از کد VB.NET با LINQ to Objects آورده شده است که تمامی عملیات‌های ذکر شده را در قالب یک برنامه ساده نشان می‌دهد. این برنامه، امکان افزودن، جستجو، حذف، ویرایش و نمایش مخاطبین را برای کاربر فراهم می‌آورد.
```vb.net
Module PhoneBook
Sub Main()
Dim contacts As New List(Of Contact) From {
New Contact With {.Name = "Ali Reza", .PhoneNumber = "09121234567", .Email = "ali@example.com", .Address = "Tehran"},
New Contact With {.Name = "Sara Ahmadi", .PhoneNumber = "09211234567", .Email = "sara@example.com", .Address = "Isfahan"},
New Contact With {.Name = "Mehdi Hosseini", .PhoneNumber = "09311234567", .Email = "mehdi@example.com", .Address = "Shiraz"},
New Contact With {.Name = "Narges Moazami", .PhoneNumber = "09411234567", .Email = "narges@example.com", .Address = "Mashhad"}
}
' نمایش همه مخاطبین
Console.WriteLine("لیست مخاطبین:")
DisplayContacts(contacts)
' افزودن مخاطب جدید
Dim newContact As New Contact With {
.Name = "Hassan Kiani",
.PhoneNumber = "09551234567",
.Email = "hassan@example.com",
.Address = "Tabriz"
}
contacts.Add(newContact)
' جستجو بر اساس نام
Dim searchResult = From c In contacts
Where c.Name.Contains("Ali")
Select c
Console.WriteLine(vbCrLf & "نتایج جستجو برای 'Ali':")
DisplayContacts(searchResult)
' حذف مخاطب
Dim toRemove = (From c In contacts
Where c.Name = "Sara Ahmadi").FirstOrDefault()
If toRemove IsNot Nothing Then
contacts.Remove(toRemove)
End If
' ویرایش شماره تلفن
Dim mehdi = (From c In contacts
Where c.Name = "Mehdi Hosseini").FirstOrDefault()
If mehdi IsNot Nothing Then
mehdi.PhoneNumber = "09871234567"
End If
' نمایش نهایی
Console.WriteLine(vbCrLf & "لیست نهایی مخاطبین:")
DisplayContacts(contacts)
Console.ReadLine()
End Sub
Sub DisplayContacts(contactList As IEnumerable(Of Contact))
For Each c In contactList
Console.WriteLine($"{c.Name} | {c.PhoneNumber} | {c.Email} | {c.Address}")
Next
End Sub
End Module
Public Class Contact
Public Property Name As String
Public Property PhoneNumber As String
Public Property Email As String
Public Property Address As String
End Class
```

نتیجه‌گیری


در این مقاله، به صورت جامع و کامل، نحوه استفاده از LINQ to Objects در VB.NET برای مدیریت دفترچه تلفن را بررسی کردیم. از تعریف ساختار داده‌ها، ساخت مجموعه، و عملیات‌های پایه مانند افزودن، حذف، ویرایش، تا عملیات‌های پیشرفته‌تر مانند جستجو، مرتب‌سازی و گروه‌بندی. این نمونه، نشان می‌دهد که چگونه LINQ می‌تواند برنامه‌های ساده و در عین حال قدرتمند را در زمینه مدیریت داده‌ها ایجاد کند، که هم سریع است و هم خوانایی کد را افزایش می‌دهد.
استفاده از LINQ در پروژه‌های بزرگ‌تر و پیچیده‌تر، به مراتب قدرت و انعطاف بیشتری می‌دهد، و به توسعه‌دهندگان کمک می‌کند تا عملیات‌های مربوط به داده‌ها را با کم‌ترین کد و بیشترین کارایی انجام دهند. بنابراین، یادگیری و تسلط بر LINQ، یکی از مهارت‌های مهم و ضروری در برنامه‌نویسی VB.NET است که ارزش زیادی در توسعه برنامه‌های کاربردی دارد.