Cara mengontrol jenis proyeksi (LINQ ke XML)
Proyeksi adalah proses memfilter sekumpulan data, mengubah bentuknya dan mungkin jenisnya. Sebagian besar ekspresi kueri melakukan proyeksi. Sebagian besar ekspresi kueri di bagian ini bernilai IEnumerable<T> dari XElement, tetapi Anda dapat membuat kumpulan jenis lain. Artikel ini menunjukkan cara melakukannya.
Contoh: Tentukan tipe baru dan buat kueri yang membuat IEnumerable dari tipe itu
Contoh berikut mendefinisikan tipe baru, Customer
, dan ekspresi kueri membuat instans objek Customer
baru dalam klausa Select
. Ini menyebabkan jenis ekspresi kueri menjadi IEnumerable<T> dari Customer
. Contoh menggunakan dokumen XML Contoh file XML: Pelanggan dan pesanan .
public class Customer
{
private string customerID;
public string CustomerID{ get{return customerID;} set{customerID = value;}}
private string companyName;
public string CompanyName{ get{return companyName;} set{companyName = value;}}
private string contactName;
public string ContactName { get{return contactName;} set{contactName = value;}}
public Customer(string customerID, string companyName, string contactName)
{
CustomerID = customerID;
CompanyName = companyName;
ContactName = contactName;
}
public override string ToString()
{
return $"{this.customerID}:{this.companyName}:{this.contactName}";
}
}
class Program
{
static void Main(string[] args)
{
XElement custOrd = XElement.Load("CustomersOrders.xml");
IEnumerable<Customer> custList =
from el in custOrd.Element("Customers").Elements("Customer")
select new Customer(
(string)el.Attribute("CustomerID"),
(string)el.Element("CompanyName"),
(string)el.Element("ContactName")
);
foreach (Customer cust in custList)
Console.WriteLine(cust);
}
}
Public Class Customer
Private customerIDValue As String
Public Property CustomerID() As String
Get
Return customerIDValue
End Get
Set(ByVal value As String)
customerIDValue = value
End Set
End Property
Private companyNameValue As String
Public Property CompanyName() As String
Get
Return companyNameValue
End Get
Set(ByVal value As String)
companyNameValue = value
End Set
End Property
Private contactNameValue As String
Public Property ContactName() As String
Get
Return contactNameValue
End Get
Set(ByVal value As String)
contactNameValue = value
End Set
End Property
Public Sub New(ByVal customerID As String, _
ByVal companyName As String, _
ByVal contactName As String)
CustomerIDValue = customerID
CompanyNameValue = companyName
ContactNameValue = contactName
End Sub
Public Overrides Function ToString() As String
Return String.Format("{0}:{1}:{2}", Me.CustomerID, Me.CompanyName, Me.ContactName)
End Function
End Class
Sub Main()
Dim custOrd As XElement = XElement.Load("CustomersOrders.xml")
Dim custList As IEnumerable(Of Customer) = _
From el In custOrd.<Customers>.<Customer> _
Select New Customer( _
el.@<CustomerID>, _
el.<CompanyName>.Value, _
el.<ContactName>.Value _
)
For Each cust In custList
Console.WriteLine(cust)
Next
End Sub
Contoh ini menghasilkan output berikut:
GREAL:Great Lakes Food Market:Howard Snyder
HUNGC:Hungry Coyote Import Store:Yoshi Latimer
LAZYK:Lazy K Kountry Store:John Steel
LETSS:Let's Stop N Shop:Jaime Yorres