Linq to Xml
Sinan Arslan
12:04
Attribute
,
Linq to Xml
,
Linq to Xml Crud İşlemleri
,
Linq to Xml Joinli
,
XDocumen
,
XElement
Hiç yorum yok
Merhaba Arkadaşlar ,Bu bölümde Linq to Xml'e giriş yapıyor olacağız.Amacımız bir console uygulaması içinde Linq to Xml yapısına bakarak valid bir xml dosyasından verileri okumak olacak birinci bölümümüzde
daha sonrasında joinli tablolarda bu işlemlerin nasıl yapıldığına bakıyor olacağız.
Video Anlatım
1.Bölüm
İlk olarak valid xml 'i oluşturacağımız tablomuza bakalım.
Yandaki tablomuzda da görüldüğü gibi Urunler ismindeki
tablomuzu xml formatına çevirelim.Tabi bu işlemler sırasında valid olmasına dikkat edelim.Yazacağımız t-sql sorgumuz
Select UrunID '@UrunID',KategoriID '@KategoriID',UrunAdi,BirimFiyati from Urunler
where Sonlandi=1 order by UrunAdi desc
for xml path('Urun'),root('Urunler')
yukardaki gibi olacaktır.Şimdi ise xml dosyamızın çıktısına bakalım.
Yan tarafta xml dosyamızın yapısı yer almaktadır.Şimdi
ise bir console uygulaması başlatalım ve Linq to Xml'e
giriş yapıyor olalım.Kodlara bakılacak olursa bizim seneryomuza uygun olmasada Attribute değerleri içinde
null olma ihtimaline karşı yapılacak cast işlemleri sırasında
hata alınmaması amaçlı datanın null gelme ihtimalide kontrol edilmiş olup.Yorum satırları içerisinde belirtilmişlerdir.Daha önceki video anlatımlarımızda Ado.Net ile ele almış olduğumuz xml yapısını
Linq to Xml ile nasıl gerçekleştirebileceğimize
bakalım şimdi.
Uygulama Kodları
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
namespace LinqtoXml
{
class Program
{
static void Main(string[] args)
{
// DosyaOku();
// DosyaOku2();
DosyaOku3();
Console.ReadLine();
}
private static void DosyaOku3()
{
XElement xdoc = XElement.Load("C:\\Users\\Acer\\Desktop\\LinqtoXml\\LinqtoXml\\Product.xml");
var urunlistesi = from k in xdoc.Elements("Urun")
where k.Element("UrunAdi").Value[0] == 'S'
select new {
ID=k.Attribute("UrunID").Value,
UrunAdi = k.Element("UrunAdi").Value,
KategoriID=Convert.ToInt32(k.Attribute("KategoriID").Value),
//Eger kategoriID null gelme ihtimali varsa
//KategoriID = (int?)(String.IsNullOrEmpty(k.Attribute("KategoriID").Value) ? null : (int?)Convert.ToInt32(k.Attribute("KategoriID").Value)),
Fiyat = Convert.ToDouble(k.Element("BirimFiyati").Value)
};
foreach (var urun in urunlistesi)
{
Console.WriteLine("{0}{1}{2}{3}",urun.ID,urun.UrunAdi,urun.KategoriID,urun.Fiyat.ToString("C2"));
}
}
private static void DosyaOku2()
{
XElement xdoc = XElement.Load("C:\\Users\\Acer\\Desktop\\LinqtoXml\\LinqtoXml\\Product.xml");
var urunlistesi = from k in xdoc.Elements("Urun")
where k.Element("UrunAdi").Value[0]=='T'
select k;
// var urunlistesi = xdoc.Elements("Urun").Where(p => p.Element("UrunAdi").Value[0] == 'T').Select(p => p.Element("UrunID").Value);
foreach (var urun in urunlistesi)
{
Console.WriteLine(urun.Element("UrunAdi").Value);
}
}
private static void DosyaOku()
{
XDocument xdoc = XDocument.Load("C:\\Users\\Acer\\Desktop\\LinqtoXml\\LinqtoXml\\Product.xml");
var urunlistesi = from k in xdoc.Element("Urunler").Elements("Urun")
select k;
foreach (var urun in urunlistesi)
{
Console.WriteLine(urun.Element("UrunAdi").Value);
}
}
}
}
2.Bölüm
Kullanılan Kategoriler ve Ürünler xml dosyaları içeriği
Kategoriler.xml t-sql sorgusu
Select KategoriID,KategoriAdi from Kategoriler
order by KategoriAdi desc
for xml path('Kategori'),root('Kategoriler')
Urunler.xml t-sql sorgusu
Select UrunID,UrunAdi,KategoriID,BirimFiyati from Urunler
where Sonlandi=1 order by UrunAdi desc
for xml path('Urun'),root('Urunler')
Uygulama Source
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
namespace LingToXmlKullanimi2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dgvSonuc.DataSource = UrunlistesiKategorili();
}
protected object UrunlistesiKategorili()
{
XDocument xmlUrunler =XDocument.Load("C:\\Users\\Acer\\Desktop\\LingToXmlKullanimi\\LingToXmlKullanimi2\\Urunler.xml");
XDocument xmlKategoriler = XDocument.Load("C:\\Users\\Acer\\Desktop\\LingToXmlKullanimi\\LingToXmlKullanimi2\\Kategoriler.xml");
var urunlistesi = (from urun in xmlUrunler.Element("Urunler").Elements("Urun")
join kategori in xmlKategoriler.Element("Kategoriler").Elements("Kategori") on urun.Element("KategoriID").Value equals kategori.Element("KategoriID").Value
select new
{
ID = urun.Element("UrunID").Value,
UrunAdi=urun.Element("UrunAdi").Value,
KategoriAdi=kategori.Element("KategoriAdi").Value,
Fiyat = urun.Element("BirimFiyati").Value
}).ToList();
return urunlistesi;
}
}
}
Linq To Xml XElement,Attribute,XDocument Kullanımı
using System.Xml.Linq namespace altında bulunan linq to xml içeriklerini kullanmamıza olanak sağlayan bu namespace ile XElement,Attribute,XDocument kullanımı ele aldığımız uygulamamıza geçmeden valid bir xml yapısı oluşturmak için öncelikle KuzeyRuzgari veri tabanı üzerinden Products tablomuzu ele alarak valid xml yapımızı oluşturulım
select ProductID '@UrunID',ProductName,UnitPrice,UnitsInStock from Products
order by ProductName desc
for xml path ('Urun'),root ('Urunler')
Yukarıda belirmiş olduğumuz valid xmlimizi oluşturağımız t-sql sorgumuzdan ilerleyerek elde edeğimiz xml yapısı içeriğinin bir kısmı yandaki
gibidir
Daha sonra vs 2013 ide içerisinde bir console uygulaması başlatıp oluşan projeye sağ tık new item ile bir adet xml file ekleyelim .Ve İsmini Products olarak verelim Products.xml
Products.xml dosyamızın ilk satırında bizi karşılayan xml beyanının hemen altına mssql tarafında t-sql sorgumuzla oluşturmuş olduğumuz valid xml içeriğimizi xml filemızın içindeki xml beyanının hemen altına yapıştıralım.Ve son olarak uygulamızı çalıştırırken exenin yanından çalışacak olan load methodumuz için yapmamız gereken solution üzerine sağ tıklayıp Open Folder in File Explorer diyerek xml dosyamızın bir kopyasını bin debug klasoru içersine kopyalamak tabi istenirse xml dosyasının propertieslerini bakılarak Copy to Output Directory diyerek her F5 de bir kopyasınıda exenin yanına oluşturabilirsiniz.Artık uygulamamız kodlamaya hazır olduğuna göre başlayalım.
1) ===========================================================
XDocument xdoc = XDocument.Load("Products.xml");
var urunlistesi = from urun in xdoc.Element("Urunler").Elements("Urun")
where urun.Attribute("UrunID").Value == "5"
let UnitPrice = urun.Element("UnitPrice")
where Convert.ToDouble(UnitPrice.Value) >= 900
select urun;
foreach (var item in urunlistesi)
{
Console.WriteLine(item.Element("ProductName").Value);
}
Console.ReadLine();
2) ===========================================================
XElement xdoc = XElement.Load("Products.xml");
var urunlistesi = from urun in xdoc.Elements("Urun")
where urun.Element("ProductName").Value[0] == 'T'
select urun;
foreach (var item in urunlistesi)
{
Console.WriteLine(item.Element("ProductName").Value);
}
Console.ReadLine();
3) ===========================================================
var urunlistesi = from urun in xdoc.Elements("Urun")
where urun.Element("ProductName").Value[0] == 'T'
select new
{
UrunID = urun.Attribute("UrunID").Value,
UrunAdi = urun.Element("ProductName").Value,
UrunStokSayisi = urun.Element("UnitsInStock").Value,
UrunFiyati = urun.Element("UnitPrice").Value
};
foreach (var item in urunlistesi)
{
Console.WriteLine("{0},{1},{2},{3}", "UrunID " + item.UrunID, "UrunAdi " + item.UrunAdi, "Stok Sayisi " + item.UrunStokSayisi, "Fiyati " + item.UrunFiyati);
}
===========================================================
Linq to Xml Crud İşlemleri
1) Xml dosyasına Urun Ekleme
string path = "C:\\Users\\Sinan\\Desktop\\XmlGiris\\XmlGiris\\Products.xml";
XDocument xdoc = XDocument.Load(path);
XElement urun = new XElement("Urun",
new XAttribute("UrunID","98"),
new XElement ("ProductName","Denemexml"),
new XElement ("UnitPrice","999"),
new XElement("UnitsInStock","1000")
);
xdoc.Root.Add(urun);
xdoc.Save(path);
2) Xml dosyasından urun silme
string path = "C:\\Users\\Sinan\\Desktop\\XmlGiris\\XmlGiris\\Products.xml";
XDocument xdoc = XDocument.Load(path);
var silinecekurun = xdoc.Descendants("Urun").Single(x => x.Attribute("UrunID").Value.Equals("98"));
silinecekurun.Remove();
xdoc.Save(path);
3)Xml dosyasında urun güncelleme
string path = "C:\\Users\\Sinan\\Desktop\\XmlGiris\\XmlGiris\\Products.xml";
XDocument xdoc = XDocument.Load(path);
var guncellenecekurun = xdoc.Descendants("Urun").Single(x => x.Attribute("UrunID").Value.Equals("17"));
guncellenecekurun.SetElementValue("UnitsInStock", "10");
guncellenecekurun.SetElementValue("UnitPrice", 90);
xdoc.Save(path);
===========================================================
Not :3 numaralı uygulamada xml içeriğimizde null içerikler olmadığıdan dolayı null kavramı ele alınmamıştır.Bu noktada convert işlemleri yapılırken eğer elinizde null degerler varsa turner if ile gelen dataların degerlerinin null olma durumlarıda kontrol edilmedilir(Video Anlatımta değinilmiştir).Gene Unutulmamalıdır ki Value lar string deger döndürmekte ve gelen datanın tipine göre işlemler yapılmak istenildiğinde büyüktür küçüktür vs gibi yazacağınız kritere göre convert edilmedilir.
Umarım faydalı olur
Linq to Sql Temel Method Kullanımı ve Linq to Sql Giriş
Merhaba ArkadaşlarBu bölümde linq to sql 'e giriş aşaması taşıyan bu uygulamamız üzerinde kullanılan belli başlı methodların kullanımına gerek linq sorguları gereksede lambda kullanımı olarak ele alıyor olacağız.
Aşağıda proje içindeki kodlama işlemleri ve video anlatım bulunmakta.Umarım faydalı olur
1.Bölüm
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lingtosql
{
class Program
{
static void Main(string[] args)
{
//Hepsi();
//VeVeyaKullanimi();
//Ortalama();
//IcindeVarmi();
//FarkliKayit();
VarsayilanDeger();
Console.ReadLine();
}
private static void VarsayilanDeger()
{
int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var sorgu = sayilar.Where(x => x > 11).DefaultIfEmpty(-1);
foreach (var item in sorgu)
{
Console.WriteLine(item);
}
}
private static void FarkliKayit()
{
int[] sayilar = { 1, 2, 3,5,4,5,9, 4, 5, 6, 7, 8, 9, 10 };
var sorgu = sayilar.Distinct();
foreach (var sayi in sorgu)
{
Console.WriteLine(sayi);
}
}
private static void IcindeVarmi()
{
string[] sehirler = { "Ankara", "Istanbul", "Konya" };
var sehir = sehirler.Contains("Afyon");
Console.WriteLine(sehir);
}
private static void Ortalama()
{
int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//var sorgu = sayilar.Average();
var sorgu = sayilar.Where(x => x <= 9).Average();
Console.WriteLine(sorgu);
}
private static void VeVeyaKullanimi()
{
int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var sorgu = from k in sayilar
//where k >= 3 && k<=9
where k==3 || k==9
select k;
foreach (var sayi in sorgu)
{
Console.WriteLine(sayi);
}
}
private static void Hepsi()
{
int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var sorgu = sayilar.All(x=> x<=10);
Console.WriteLine(sorgu);
}
}
}
2.Bölüm
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace LingSorgulari
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
KuzeyRuzgariDataContext db = new KuzeyRuzgariDataContext();
private void Form1_Load(object sender, EventArgs e)
{
#region OderByKullanımı
//order by Ling sorgusu
//var sorgu = from k in db.Kategorilers
// orderby k.KategoriID ascending
// select new {
// k.KategoriID,
// k.KategoriAdi
// };
//Lambda Kullanımı
//var sorgu = db.Kategorilers.OrderBy(k => k.KategoriID).Select(m => new { m.KategoriID, m.KategoriAdi });
//dgvSonuc.DataSource = sorgu;
#endregion
#region Like Kullanımı StartWith ve EndsWith
//Like ling sorgusu
//var sorgu = from k in db.Kategorilers
// where k.KategoriAdi.StartsWith("Con")
// select new {
// k.KategoriID,
// k.KategoriAdi
// };
// Lambda
//var sorgu = db.Kategorilers.Where(k => k.KategoriAdi.StartsWith("Con")).OrderBy(k => k.KategoriID).Select(p => new { p.KategoriID, p.KategoriAdi });
//dgvSonuc.DataSource = sorgu;
//var sorgu = from k in db.Kategorilers
// where k.KategoriAdi.EndsWith("ood")
// orderby k.KategoriID
// select new {k.KategoriAdi,k.KategoriID };
//lambda EndsWith Kullanımı
//var sorgu = db.Kategorilers.Where(k => k.KategoriAdi.EndsWith("ood")).OrderBy(k => k.KategoriID).Select(p => new { p.KategoriID, p.KategoriAdi });
//dgvSonuc.DataSource = sorgu;
#endregion
#region Take Kullanımı(Top)
//// Take Ling sorgusu
////var sorgu = (from k in db.Personellers
//// select new {
//// k.Sehir,
//// k.Adi
//// }).Take(3);
////Lambda Take Kullanımı
//var sorgu = db.Personellers.Select(k => new { k.Adi, k.Sehir }).Take(3);
//dgvSonuc.DataSource = sorgu;
#endregion
#region SkipKullanımı()
//Skip () Kullanımı Ling
//var sorgu = (from k in db.Personellers
// select new {k.Adi,k.Sehir}).Skip(3);
//Lambda
//var sorgu = db.Personellers.Select(k => new { k.Adi, k.Sehir }).Skip(3);
//dgvSonuc.DataSource = sorgu;
#endregion
#region Distinct Kullanımı
//Ling Sorgusu
////var sorgu = (from k in db.Personellers
//// select new { k.Adi, k.Sehir }).Distinct();
////dgvSonuc.DataSource = sorgu;
////Lambda Distinct Kullanımı
//var sorgu = db.Personellers.Select(k => new {k.Adi,k.Sehir }).Distinct();
//dgvSonuc.DataSource = sorgu;
#endregion
var sorgu = db.Personellers.Select(k => new { k.Adi, k.Sehir }).Skip(1).Take(5);
dgvSonuc.DataSource = sorgu;
}
}
}
Video Anlatım
Bol Kodlu Günler Dilerim
Hiç yorum yok :
Yorum Gönder
Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.
Yardım Destek İsteme Ve Blog Hakkında
Merhaba Arkadaşlar,Yaklaşık 3 senedir blog üzerinden paylaşımlarda bulunmaktayım.Her ne kadar belli dönemlerde işlerimde dolayı kapalı kalmış olsada.Amacım bilginin paylaşıldıkça güzel olduğunu ve bir anlamı ancak bu şekilde olabildiğini sağlamak.Bunları yaparkende hiçbir maddi yada manevi beklenti içinde değilim.
Bu noktada ise paylaşımlar ve yardım isteme noktasında amacım hazır olarak herşeyi vermek değil.Maddi anlam ifade etmediğinden blog üzerinden geniş çaplı uygulamalar bulabilmenize rağmen belli bölümleri bilerek ve isteyerek eksik bırakılmıştır.Bunun sebebi bu işle uğraşan arkadaşa belli oranda sadece yol gösterebilmek ve devamındaki kodlama işlemlerini projeleri uygulamaları takip eden arkadaş yada arkadaşların yapabilmesini sağlamaktır.
Bu aşamada gerek sosyal platformlardan gereksede mail ortamında gelen sorularınıza bildiğim tüm noktalarda yardım etmekteyim.Fakat son zamanlarda gelen sorularda bu projede şuraları yapamadım yada falanca ödevim var iki dakka teamviewer ile bağlanığ yaparmısın gibi istek ve taleplere sadece nasıl yapılabileceğini anlatarak cevap vermekteyim.Buda bazı arkadaşların tepkilerine yol açmakta.
Bu blogun amacı hazır balık vermek değil balık tutmasını öğretebilmektir.Bu işe ilk başladığım zamanlardan bu yana meslekle alakalı sorunları bende sizler gibi yaşadım.Fakat kimseye bağlanda bana kod yaz demedim.Sebebi ise hep aklımda bu işi yapan gerek hocalarım gerekse bu meslekte yıllarını vermiş deneyimli arkadaşlar olsun.Herkesin kendi işinin ve uğraşının olmasıdır.
Ben sorularımı sorarken bu işlemleri yaparken nasıl bir yol yada mantık kullanmalıyım tarzında sorarak bu aşamalara geldim.Araştırıp geliştirmek ve sonunda elde ettiğiniz şeyin insanların faydasına olabilecek bir seviyeye geldiğini hissettiğiniz anda kodlama işlemleri ve alınan ürün
anlam katmakta.
Benim gibi sektörde toplamda 3 senesi geçen ve sürekli gelişmeyi araştırmayı edinen siz değerli arkadaşlarıma önerilerimi yukarda sıraladım.Tabi bu şu demek değildir.Ben herşeyi biliyorum yada yaparım.Bunun anlamı yapılabilirliği kanıtlanmış bir şey varsa buda kullanılıyorsa bunu yazan kişiden hiç bir eksiğinizin olmamasıdır.Sadece daha fazla araştırma yapmak gerektiğidir.
Sözlerimi noktalarken bol kodlu günlerle kalın diyorum.
Saygılarımla Sinan Arslan
Hiç yorum yok :
Yorum Gönder
Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.
C# Stok Takip Otomasyonu
Merhaba Arkadaşlar ,Bu bölümde Devexpress üzerinde c# ortamında Devexpress componentlerini kullanarak hazırlamış olduğum asıl itibari ile Devexpress noktasında kendimi geliştirmek için yazdığım Stok takip projesini tamamlandığında sizlerle paylaşıyor olacağım .
Bu noktada sizlerden gelebilecek önerileriniz yada şunu da yapmamız güzel olurdu diyebileceğiniz noktalar olursa bu makalenin altına yorum ekleyerek projenin ilerleyişine katkıda bulunabilirsiniz.
Her nekadar projesi video anlatım serisi olarak yayınlamıyor olsamda proje acık kaynak kodlu ve herzamanki gibi belli bir mimari yapı içersinden ilerlediğimden dolayı paylaşım esnasında kodlama ile source yer alan bölümlerin anlaşılır bir şekildedir.Bazı bölümlerine ait proje ekranları
Proje Mimari Tasarım N-Tier Katmanlı Mimari
Zamanım olursa projeyi bitirip paylaşıyor olacağım.
Bir yazılım evi için istenen örnek uygulamasının servisden dönen degerine bakalım şimdide.(resim 3)
Örnek Uygulama İndir
4 yorum :
Yorum Gönder
Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.
Servis Yönelimli Mimari (Service Oriented Architecture-SOA) Uygulama ve Video Anlatım Serisi
Merhaba Arkadaşlar ,Bu bölümde xml webserviceler ,windows servisleri ve wcf servisleri ile örnek uygulamalar yapıp,ihtiyaclarımız doğrultusunda güvenliğimiz için gerekli Authentication yöntemlerimize bakıyor olacağız .Daha sonrasında uygulamalarımız içinde yazmış olduğumuz servisdeki metodlarımızın
asenkron çalışmasına değinip yazmış olduğum örnek uygulamayı indirebileceğiniz bir anlatım gerçekleştiriyor olacağız.
Umarım Faydalı olur .
WCF Giriş Video 1
Uygulama Indir
WCF Uygulama Serisi Bolum 1 Video Anlatım
WCF Uygulama Serisi Bolum 2 Video Anlatım
WCF Uygulama Serisi Bolum 1 Uygulama Indir
Wcf Uygulama Serisi Bolum 2 Uygulama Indir
Hiç yorum yok :
Yorum Gönder
Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.
Kaydol:
Kayıtlar
(
Atom
)
Hiç yorum yok :
Yorum Gönder
Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.