Ekspresi Inisialisasi
Ekspresi inisialisasi menginisialisasi objek baru. Sebagian besar ekspresi inisialisasi didukung, termasuk sebagian besar ekspresi inisialisasi C# 3.0 dan Visual Basic 9.0 yang baru. Jenis berikut dapat diinisialisasi dan dikembalikan oleh kueri LINQ ke Entitas:
Kumpulan dari nol atau lebih objek entitas yang diketik atau proyeksi jenis kompleks yang didefinisikan dalam model konseptual.
Jenis CLR yang didukung oleh Kerangka Kerja Entitas.
Koleksi sebaris.
Jenis anonim.
Inisialisasi jenis anonim ditunjukkan dalam contoh berikut dalam sintaks ekspresi kueri:
Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
var salesInfo =
from s in context.SalesOrderHeaders
where s.TotalDue >= totalDue
select new { s.SalesOrderNumber, s.TotalDue };
Console.WriteLine("Sales order numbers:");
foreach (var sale in salesInfo)
{
Console.WriteLine("Order number: " + sale.SalesOrderNumber);
Console.WriteLine("Total due: " + sale.TotalDue);
Console.WriteLine("");
}
}
Dim totalDue = 200
Using context As New AdventureWorksEntities()
Dim salesInfo = _
From s In context.SalesOrderHeaders _
Where s.TotalDue >= totalDue _
Select New With {s.SalesOrderNumber, s.TotalDue}
Console.WriteLine("Sales order numbers:")
For Each sale In salesInfo
Console.WriteLine("Order number: " & sale.SalesOrderNumber)
Console.WriteLine("Total due: " & sale.TotalDue)
Console.WriteLine("")
Next
End Using
Contoh berikut dalam sintaks kueri berbasis metode menunjukkan inisialisasi jenis anonim:
Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
var salesInfo =
context.SalesOrderHeaders
.Where(s => s.TotalDue >= totalDue)
.Select(s => new { s.SalesOrderNumber, s.TotalDue });
Console.WriteLine("Sales order numbers:");
foreach (var sale in salesInfo)
{
Console.WriteLine("Order number: " + sale.SalesOrderNumber);
Console.WriteLine("Total due: " + sale.TotalDue);
Console.WriteLine("");
}
}
Dim totalDue = 200
Using context As New AdventureWorksEntities()
Dim salesInfo = _
context.SalesOrderHeaders _
.Where(Function(s) s.TotalDue >= totalDue) _
.Select(Function(s) New With {s.SalesOrderNumber, s.TotalDue})
Console.WriteLine("Sales order numbers:")
For Each sale In salesInfo
Console.WriteLine("Order number: " & sale.SalesOrderNumber)
Console.WriteLine("Total due: " & sale.TotalDue)
Console.WriteLine("")
Next
End Using
Inisialisasi kelas yang ditentukan pengguna juga didukung. Pola inisialisasi C# 3.0 dan Visual Basic 9.0 didukung dan mengasumsikan bahwa getter dan setter properti simetris. Contoh berikut dalam sintaks ekspresi kueri menunjukkan kelas khusus yang diinisialisasi dalam kueri:
class MyOrder { public string SalesOrderNumber; public DateTime? ShipDate; }
Class MyOrder
Public SalesOrderNumber As String
Public ShipDate As DateTime?
End Class
Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
IQueryable<MyOrder> salesInfo =
from s in context.SalesOrderHeaders
where s.TotalDue >= totalDue
select new MyOrder
{
SalesOrderNumber = s.SalesOrderNumber,
ShipDate = s.ShipDate
};
Console.WriteLine("Sales order info:");
foreach (MyOrder order in salesInfo)
{
Console.WriteLine("Order number: " + order.SalesOrderNumber);
Console.WriteLine("Ship date: " + order.ShipDate);
Console.WriteLine("");
}
}
Dim totalDue = 200
Using context As New AdventureWorksEntities()
Dim salesInfo = _
From s In context.SalesOrderHeaders _
Where s.TotalDue >= totalDue _
Select New MyOrder With _
{ _
.SalesOrderNumber = s.SalesOrderNumber, _
.ShipDate = s.ShipDate _
}
Console.WriteLine("Sales order info:")
For Each order As MyOrder In salesInfo
Console.WriteLine("Order number: " & order.SalesOrderNumber)
Console.WriteLine("Ship date: " & order.ShipDate)
Console.WriteLine("")
Next
End Using
Contoh berikut dalam sintaks kueri berbasis metode menunjukkan kelas kustom yang diinisialisasi dalam kueri:
Decimal totalDue = 200;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
IQueryable<MyOrder> salesInfo =
context.SalesOrderHeaders
.Where(s => s.TotalDue >= totalDue)
.Select(s => new MyOrder
{
SalesOrderNumber = s.SalesOrderNumber,
ShipDate = s.ShipDate
});
Console.WriteLine("Sales order info:");
foreach (MyOrder order in salesInfo)
{
Console.WriteLine("Order number: " + order.SalesOrderNumber);
Console.WriteLine("Ship date: " + order.ShipDate);
Console.WriteLine("");
}
}
Dim totalDue = 200
Using context As New AdventureWorksEntities()
Dim salesInfo As IQueryable(Of MyOrder) = _
context.SalesOrderHeaders _
.Where(Function(s) s.TotalDue >= totalDue) _
.Select(Function(s) New MyOrder With _
{ _
.SalesOrderNumber = s.SalesOrderNumber, _
.ShipDate = s.ShipDate _
})
Console.WriteLine("Sales order info:")
For Each order As MyOrder In salesInfo
Console.WriteLine("Order number: " & order.SalesOrderNumber)
Console.WriteLine("Ship date: " & order.ShipDate)
Console.WriteLine("")
Next
End Using