Selamlar ;
Sharepoint içerisinde bir listeden herhangi bir kayıt almak istediğinizde genel itibariyle kullanılan 2 yontem var.
Bunlardan birincisi tüm listeyi alip daha sonra LINQ ya da çok önceleri DataTable classının Select() metodunu kullanarak bir
şekilde listelemek ya da CAML query'lerini kullanmak.2. yöntem legal olan kesinlikle ama zorlukları var.Bu zorluklardan biride
yazılacak olan query'inin CAML için complex bir yapı teşkil ediyor olması.XML based bir yapıya sahip (CRM de
fetch yapanlar bilirler benzer bir yapıda orda bulunmakta..)..
Bir arkadaşımız saolsun oturup bunun için free versiyonu bulunan bir tool hazırlamış kesinlike kullanmanızı öneririm.
http://www.u2u.info/Blogs/Patrick/Lists/Posts/Post.aspx?ID=1252 linkinden hazırladığı user controle ve ilgili helper
classını nasıl kullandığını görebilirsiniz. İndirmek için http://www.u2u.net/res/Tools/CamlQueryBuilder.aspx adresini
kullanabilirsiniz (hem 2003 hemde 2007 versiyonları bulunmakta..)
Gelelim join meselesine , CAML altyapısı gereği join mekanizmasına izin vermiyor peki çözüm olarak ne yapabiliriz ?
Database'mi bağlanacağız direkt, hayır..zaten bağlansanızda elinize birşey geçmez doğru dürüst :))
Aslına bakarsanız öyle çok bir çözüm şansınız olmamakla birlikte bunun LINQ ile bir nebze de olsa aşıldığını söyleyebiliriz..
Nasıl mı, pek tabi join mekanizması ile.Örnek vermek gerekirse ;
var Sonuc = from AA in TelListe
join BB in SipListe on AA equals BB.AltListe into SanalAd
select new { TelNo = Eleman.TelNo, Degerler = SanalAd };
şeklinde bir query'i nasıl IEnumerable<T> için yapabiliyorsak pek tabi sharepoint üzerinden aldığımız verileri
joinlemek içinde kullanabiliriz(Verinin tutuluş biçimine dikkat).Dikkat edilecek husus veriyi alırken her halükarda
CAML query'sine where cümlesini vermeniz gerektiği , yoksa gereksiz verinin joinlenme cabası where uygulanması
ve hepsinden daha da önemlisi bunun client'a getirilmeye zorlanması mantıklı olmasa gerek :) Sonrası
LINQ'in yardımları..Umarım fikir vermiştir.
Sevgiler
E2