Ana Sayfa
Forumlar
Hakkımızda
Yükleniyor. Lütfen bekleyin ...
Kategoriler
ASP.NET
C# & VB.Net
Visual Studio ve Araçlar
Sharepoint
.NET Framework
SQL Server
Mobil Teknolojileri
Dynamics
Silverlight
İş Zekası
Windows Embedded Sistemler
Yazılım Mimarisi
Yazgeliştir
Yazar olmak ister misiniz?
Forumlar
Kitap Önerileri
Haberler
Yazarlar
İpuçları
Görüşleriniz
Hakkımızda
İstatistikler
En son kayıt olan üye:
usupay
Şuanki online üyeler (
1
) :
programci42
C# & VB.Net Kategorisi
»
LINQ to XML Select Join Sorguları
LINQ to XML Select Join Sorguları
Print Versiyonu
Yazar:
Veysel Uğur KIZMAZ
Tarih:08.01.2012
Puan:
5
(Oy Kullanan:
1
)
Okuma Sayısı:
761
Makaleyi İşaretle
Makale Özeti
LINQ to XML Select Join Sorgularını İnceleyelim
Paylaşım
Makale
Bu makalemizde LINQ to XML’de Select ve Join konularını.
Bu konuyu bir örnek uygulama üzerinde yapalım. Uygulamamızda Kategoriler ve kategorilerin bulunduğu Urunler’imiz var. Bu bilgileri XML dosyalarında tutmaktayız. Şimdi bunlara erişimin nasıl yapılacağını inceleyelim.
Örnek uygulamamızı Asp.Net Web Application üzerinde gerçekleştireceğiz. Kategoriler.xml ve Urunler.xml dosyalarımızı XML klasöründe tutalım.
Önce XML dosyalarımıza göz atalım.
Kategoriler.xml
<?
xml
version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
kategoriler
>
<
kategori
>
<
id
>
1
</
id
>
<
ad
>
Icecek
</
ad
>
</
kategori
>
<
kategori
>
<
id
>
2
</
id
>
<
ad
>
Yiyecek
</
ad
>
</
kategori
>
</
kategoriler
>
Urunler.xml
<?
xml
version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
urunler
>
<
urun
>
<
id
>
1
</
id
>
<
ad
>
Kola
</
ad
>
<
kategoriid
>
1
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
2
</
id
>
<
ad
>
Meyve Suyu
</
ad
>
<
kategoriid
>
1
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
3
</
id
>
<
ad
>
Peynir
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
4
</
id
>
<
ad
>
Zeytin
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
</
urunler
>
Öncelikle Kategorilerimizi içinde bulunduracağımız Kategori nesnemizi tanımlayalım.
Kategori.cs
public
class
Kategori
{
public
string
Id {
get
;
set
; }
public
string
Ad {
get
;
set
; }
}
Kategoriler.xml dosyasına erişip bu dosyadaki tüm kategorileri alalım.
protected
object
Getir_Kategoriler()
{
XDocument
xmlKategoriler =
XDocument
.Load(Server.MapPath(
"XMl/Kategoriler.xml"
));
var
kategoriler = (
from
kategori
in
xmlKategoriler.Element(
"kategoriler"
).Elements(
"kategori"
)
select
new
Kategori
{
Id = kategori.Element(
"id"
).Value,
Ad = kategori.Element(
"ad"
).Value
}).ToList();
return
kategoriler;
}
XDocument türündeki nesnemiz, XML dosyamızı temsil etmektedir.
kategoriler değişkenimizde XML’den çektiğimiz veriler bulunmaktadır.
xmlKategoriler.Element(“kategoriler”) ile XML’deki <kategoriler> nesnesi ve altındaki nesneleri alıyoruz. .Elements(“kategori”) ile, <kategoriler> nesnesi içindeki <kategori> nesneLERini alıyoruz. kategori değişkenimize, <kategoril>’in altındaki tüm <kategori>’leri alıyoruz. select new Kategori{} diyerek aldığımız tüm elemanları List<Kategori> nesnesinde tutuyoruz.
Bu methodumuzu Page_Load event’ında çağıracak olursak aşağıdaki ekran çıktısını alacağız.
protected
void
Page_Load(
object
sender,
EventArgs
e)
{
GridView1.DataSource = Getir_Kategoriler();
GridView1.DataBind();
}
Şimdi aynı işlemi Urunler.xml için yapalım.
Urun.cs
public
class
Urun
{
public
string
Id {
get
;
set
; }
public
string
Ad {
get
;
set
; }
public
string
Kategori {
get
;
set
; }
}
protected
object
Getir_Urunler()
{
XDocument
xmlUrunler =
XDocument
.Load(Server.MapPath(
"XML/Urunler.xml"
));
var
urunler = (
from
urun
in
xmlUrunler.Element(
"urunler"
).Elements(
"urun"
)
select
new
Urun
{
Id = urun.Element(
"id"
).Value,
Ad = urun.Element(
"ad"
).Value,
Kategori = urun.Element(
"kategoriid"
).Value
}).ToList();
return
urunler;
}
Bu methodumuzu Page_Load event’ında çağıracak olursak aşağıdaki ekran çıktısını alacağız.
protected
void
Page_Load(
object
sender,
EventArgs
e)
{
GridView1.DataSource = Getir_Urunler();
GridView1.DataBind();
}
Kategoriler XML’imizde kategorinin Id’si ile Urunler XML’imizde ürünün kategoriid’sinin bağlı olduğunu düşünüp bir bağlantı kurup ekranda “ürün id, ürün adı, kategori adı”’nı ekranda gösterelim.
protected
object
Getir_Urunler2()
{
XDocument
xmlUrunler =
XDocument
.Load(Server.MapPath(
"XML/Urunler.xml"
));
XDocument
xmlKategoriler =
XDocument
.Load(Server.MapPath(
"XMl/Kategoriler.xml"
));
var
urunler = (
from
urun
in
xmlUrunler.Element(
"urunler"
).Elements(
"urun"
)
join
kategori
in
xmlKategoriler.Element(
"kategoriler"
).Elements(
"kategori"
)
on
urun.Element(
"kategoriid"
).Value
equals
kategori.Element(
"id"
).Value
select
new
Urun
{
Id = urun.Element(
"id"
).Value,
Ad = urun.Element(
"ad"
).Value,
Kategori = kategori.Element(
"ad"
).Value
}).ToList();
return
urunler;
}
xmlUrunler değişkenimizde Urunler.xml’i, xmlKategoriler değişkenimizde Kategoriler xml’imizi tutuyoruz.
Join yaptığımız kodu şu şekilde açıklayabiliriz : xmlUrunler’in <urunler> elemanının altındaki <urun> elemanları ile xmlKategoriler’in <kategoriler> elemanının altındaki <kategori> elemanları, <urun>’un <kategoriid>’si ile <kategori>’nin <id>’sinin aynı olacağını belirterek birleştiriyoruz ve sonuçta oluşan veri kümemizi Urun nesnesinde tanımlıyoruz. Bize urunler değişkeninde List<Urun> türünden bir değer dönmektedir.
Bu methodumuzu Page_Load event’ında çağıracak olursak aşağıdaki ekran çıktısını alacağız.
protected
void
Page_Load(
object
sender,
EventArgs
e)
{
GridView1.DataSource = Getir_Urunler2();
GridView1.DataBind();
}
Son olarak bu örneğimizdeki iki XML dosyasını tek XML dosyası haline getirip son örneğimizi ona göre düzenleyelim.
UrunKategori.xml
<?
xml
version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
bakkal
>
<
urunler
>
<
urun
>
<
id
>
1
</
id
>
<
ad
>
Kola
</
ad
>
<
kategoriid
>
1
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
2
</
id
>
<
ad
>
Meyve Suyu
</
ad
>
<
kategoriid
>
1
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
3
</
id
>
<
ad
>
Peynir
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
4
</
id
>
<
ad
>
Zeytin
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
5
</
id
>
<
ad
>
zeytin yağı
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
6
</
id
>
<
ad
>
Tereyağı
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
7
</
id
>
<
ad
>
ayçiçek yağı
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
<
urun
>
<
id
>
8
</
id
>
<
ad
>
Fındık Yağı
</
ad
>
<
kategoriid
>
2
</
kategoriid
>
</
urun
>
</
urunler
>
<
kategoriler
>
<
kategori
>
<
id
>
1
</
id
>
<
ad
>
Icecek
</
ad
>
</
kategori
>
<
kategori
>
<
id
>
2
</
id
>
<
ad
>
Yiyecek
</
ad
>
</
kategori
>
</
kategoriler
>
</
bakkal
>
<urunler> ve <kategoriler> nesnelerimizi <bakkal> nesnemizin altında tanımlayalım.
protected
object
Getir_UrunKategori()
{
XDocument
xmlUrunler =
XDocument
.Load(Server.MapPath(
"XML/UrunKategori.xml"
));
var
urunler = (
from
urun
in
xmlUrunler.Element(
"bakkal"
).Element(
"urunler"
).Elements(
"urun"
)
join
kategori
in
xmlUrunler.Element(
"bakkal"
).Element(
"kategoriler"
).Elements(
"kategori"
)
on
urun.Element(
"kategoriid"
).Value
equals
kategori.Element(
"id"
).Value
select
new
Urun
{
Id = urun.Element(
"id"
).Value,
Ad = urun.Element(
"ad"
).Value,
Kategori = kategori.Element(
"ad"
).Value
}).ToList();
return
urunler;
}
Burada önce xmlUrunler’in altındaki bakkal elemanına erişiyoruz. Sonrasında urunler ve kategoriler elemanlarına erişiyoruz.
Çalıştırdığımızda ekran çıktısı aşağıdaki gibi olacaktır.
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com
www.yazilimdilleri.net
Makaleyi nasıl buldunuz?
Makaleye puan vermek için üye girişi yapmanız gerekmektedir.
v2.4
Geri Bildirim (Feedback)
Site içerisinde yazılan tüm makalelerin yazım ve yayınlama hakkı aksi belirtilmediği sürece sadece yazarlara aittir.
Yazgelistir.Com Ekibi - 2006 -
Yazgelistir.com