使用客户端对象模型从SP列表中获取列表项字段值

San*_*wat 7 sharepoint caml c#-4.0

使用客户端对象模型从SP列表中获取列表项及其属性的最佳方法是什么?

这是我正在使用的代码.

        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());
             }
         }
Run Code Online (Sandbox Code Playgroud)

我想删除用于在上下文中加载列表项的单个内联foreach,如果可能,在第一个执行查询本身中加载项字段值.

我尝试使用以下内容

 context.Load(items, 
            itema => itema.Include(
                item => item,
                item=> item.FieldValues,
                item => item["CustomerId"]));
Run Code Online (Sandbox Code Playgroud)

这不起作用.

谁能提供更清洁的解决方案?

Tho*_*ans 5

查询SharePoint的最有效方法是使用CAML查询.通过调用(SP)List.GetItems(camlQuery).您将始终收到(SP)ListItemCollection的实例.

因此,最有效的查询将如下所示

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"]);
}
Run Code Online (Sandbox Code Playgroud)

托尔斯滕


小智 0

我不是 100% 确定您想从田地中获得什么属性,但您可以尝试以下操作:

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"));
}
Run Code Online (Sandbox Code Playgroud)

或者

您正在查找的属性实际上可能位于 SPField 对象下。请在此处查看可用的属性和方法:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfield_members (v=office.12).aspx

希望这可以帮助。如果不是有关您希望从列表字段中获取哪些实际属性的更多信息可能有助于提供更准确的解决方案?