Partecipa agli operatori in LINQ
L'unione si riferisce a un'operazione in cui vengono prese di mira origini dati con relazioni difficili da seguire tra loro in modo diretto.
Operatore | Descrizione | Sintassi delle espressioni di query C # | Sintassi delle espressioni di query VB |
---|---|---|---|
Aderire | L'operatore unisce due sequenze sulla base delle chiavi corrispondenti | unirsi ... in ... su ... uguale ... | Da x In ..., y In ... Dove xa = ya |
GroupJoin | Unisci due sequenze e raggruppa gli elementi corrispondenti | aderire ... a ... su ... uguale ... a ... | Partecipa al gruppo ... In ... On ... |
Esempio di join: espressione di query
C #
using System;
using System.Collections.Generic;
using System.Linq;
namespace Operators {
class JoinTables {
class DepartmentClass {
public int DepartmentId { get; set; }
public string Name { get; set; }
}
class EmployeeClass {
public int EmployeeId { get; set; }
public string EmployeeName { get; set; }
public int DepartmentId { get; set; }
}
static void Main(string[] args) {
List <DepartmentClass> departments = new List <DepartmentClass>();
departments.Add(new DepartmentClass { DepartmentId = 1, Name = "Account" });
departments.Add(new DepartmentClass { DepartmentId = 2, Name = "Sales" });
departments.Add(new DepartmentClass { DepartmentId = 3, Name = "Marketing" });
List <EmployeeClass> employees = new List <EmployeeClass>();
employees.Add(new EmployeeClass { DepartmentId = 1, EmployeeId = 1, EmployeeName = "William" });
employees.Add(new EmployeeClass { DepartmentId = 2, EmployeeId = 2, EmployeeName = "Miley" });
employees.Add(new EmployeeClass { DepartmentId = 1, EmployeeId = 3, EmployeeName = "Benjamin" });
var list = (from e in employees join d in departments on e.DepartmentId equals d.DepartmentId select new {
EmployeeName = e.EmployeeName,
DepartmentName = d.Name
});
foreach (var e in list) {
Console.WriteLine("Employee Name = {0} , Department Name = {1}", e.EmployeeName, e.DepartmentName);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
}
VB
Module Module1
Sub Main()
Dim account As New Department With {.Name = "Account", .DepartmentId = 1}
Dim sales As New Department With {.Name = "Sales", .DepartmentId = 2}
Dim marketing As New Department With {.Name = "Marketing", .DepartmentId = 3}
Dim departments As New System.Collections.Generic.List(Of Department)(New Department() {account, sales, marketing})
Dim william As New Employee With {.EmployeeName = "William", .EmployeeId = 1, .DepartmentId = 1}
Dim miley As New Employee With {.EmployeeName = "Miley", .EmployeeId = 2, .DepartmentId = 2}
Dim benjamin As New Employee With {.EmployeeName = "Benjamin", .EmployeeId = 3, .DepartmentId = 1}
Dim employees As New System.Collections.Generic.List(Of Employee)(New Employee() {william, miley, benjamin})
Dim list = (From e In employees
Join d In departments On e.DepartmentId Equals d.DepartmentId
Select New Person With {.EmployeeName = e.EmployeeName, .DepartmentName = d.Name})
For Each e In list
Console.WriteLine("Employee Name = {0} , Department Name = {1}", e.EmployeeName, e.DepartmentName)
Next
Console.WriteLine(vbLf &"Press any key to continue.")
Console.ReadKey()
End Sub
Class Employee
Public Property EmployeeId As Integer
Public Property EmployeeName As String
Public Property DepartmentId As Integer
End Class
Class Department
Public Property Name As String
Public Property DepartmentId As Integer
End Class
Class Person
Public Property EmployeeName As String
Public Property DepartmentName As String
End Class
End Module
Quando il codice precedente di C # o VB viene compilato ed eseguito, produce il seguente risultato:
Emplyee Name = William, Department Name = Account
Emplyee Name = Miley, Department Name = Sales
Emplyee Name = Benjamin, Department Name = Account
Press any key to continue.