2010-12-16 12 views
7

İstemci nesne modelini kullanarak liste öğelerini ve özelliklerini bir SP listesinden almanın en iyi yolu nedir?İstemci Nesne Modeli'ni kullanarak bir SP Listesinden liste öğesi alan değerlerini alma

Kullandığım kod İşte.

 string server = "http://localhost"; 
     ClientContext context = new ClientContext(server); 
     Web web = context.Web; 
     var spList = web.Lists.GetByTitle("Contact"); 
     CamlQuery query = new CamlQuery(); 
     var items = spList.GetItems(query); 
     context.Load(items, 
      itema => itema.Include(
       item => item, 
       item => item["CustomerId"])); 
     context.ExecuteQuery(); 

     Console.WriteLine("Items"); 
     foreach (var item in items.ToList()) 
     {        
       context.Load(item); 
     } 

     context.ExecuteQuery(); 
     foreach (var item in items) 
     { 
      foreach (var a in item.FieldValues) 
      { 
       Console.WriteLine(a.Key + ":" + a.Value.ToString()); 
      } 
     } 

ben bağlamda liste öğesini yüklemek için kullanılan tek astar foreach kaldırmak istediğiniz ve olası yük öğe alan değerleri ilk Sorgu kendisi Yürütme eğer.

Ben çalışmıyor aşağıdaki

context.Load(items, 
      itema => itema.Include(
       item => item, 
       item=> item.FieldValues, 
       item => item["CustomerId"])); 

kullanarak çalıştı.

Herhangi biri daha temiz bir çözüm sağlayabilir mi?

cevap

0

Sana alanlardan almak istiyorum hangi özellikleri% 100 emin değilim ama etrafında oynayabilir şunlardır:

SPSite oSite = new SPSite("http://localhost"); 
SPWeb oWeb = oSite.OpenWeb(); 

SPList oList = oWeb.Lists["LIST NAME"]; 
SPFieldCollection oFields = oList.Fields; 

foreach (SPField oField in oFields) 
{ 
    Console.WriteLine("Property: " + oField.GetProperty("PROPERTY")); 
} 

VEYA

aslında olabilir aradığınız özellik SPField nesnesinin altında. Mevcut özellikler ve yöntemler için buraya bir göz atın: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfield_members(v=office.12).aspx

Bu yardımcı olur umarım. Listelerin alanlarından çıkmak istediğiniz gerçek özellikler hakkında daha fazla bilgi yoksa daha doğru bir çözüm sağlayabilir misiniz?

+0

kullanarak istemci tarafı nesne modeli gibi görünecektir Bu özel durumda F'ye ihtiyacım var. Ben her bir liste öğesinde context.Load yapmadan listelenen ListItem ieldValues ​​koleksiyonu. –

+0

cevabınız, soruyu sormak istediği sunucu nesne modeli değil, istemci nesne modeli ile ilgilidir. – airmanx86

+0

@ airmanx86 - Evet, iyi nokta ... Üzgünüm, tamamen yanlış okuduğumu! – Luke

0

Kodunuzu buna göre değiştirin.

context.LoadQuery(items.Include(item => item["CustomerId"])); 

Ben:

IQueryable<ListItem> items = spList.GetItems(query); 

Sonra yerine Sen ListItem böyle istedi özelliğini okumak için ek ifadeler ekleyebilir

context.LoadQuery(items); 

Yük() ait) LoadQuery (call Aslında item => item.FieldValues yapmaya çalışırken sorun yaşıyor, ancak item => item.FieldValuesAsText çalışır. Eminim neden :(Ama sadece context.LoadQuery(items) yapıyor, ne yapmak istiyorsan onu yapmalısın

5

SharePoint'i sorgulamanın en etkili yolu bir CAML Sorgusu kullanmaktır. (SP) List.GetItems (camlQuery) 'yi çağırmak. (SP) ListItemCollection her zaman bir örneği.

Yani en verimli sorgu biz açıkça biz özellikleri için sormak gerekir bu

string server = "http://localhost"; 
var ctx = new ClientContext(server); 
var web = ctx.Web; 
var list = web.Lists.GetByTitle("Contacts"); 
var listItemCollection = list.GetItems(CamlQuery.CreateAllItemsQuery()); 

// always use QueryTrimming to minimize size of 
// data that has to be transfered 

ctx.Load(listItemCollection, 
      eachItem => eachItem.Include(
      item => item, 
      item => item["CustomerId"])); 
// ExecuteQuery will pull all data from SharePoint 
// which has been staged to Load() 
ctx.ExecuteQuery(); 

foreach(ListItem listItem in listItemCollection) 
{ 
    Console.WriteLine(listItem["CustomerId"]); 
} 

Thorsten

İlgili konular