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("Mov ie")
join g in XElement.Load(MapPath("Genres.xml")).Elements("Gen re")
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 خواهیم رفت.(قابل توجه دوستانی که برام پیغام میگذاشتند تا این موضوع رو شروع کنم.)