首页 > 解决方案 > SharePoint ListItemCollection.GetById 返回空 ListItem?

问题描述

所以我试图从共享点服务器 ListItem 检索数据

唯一的问题是这部分在这里:

集合.GetById(itemId)

返回一个完全空的 ListItem 而不是 id 对应的 ListItem

当我使用调试器检查时,该项目确实在集合内,并且所有数据都在其中。

我该如何纠正这个问题,或者我在这里遗漏了一些重要的东西?

        public Dictionary<string, object> GetPendingEmployeeItem(int itemId)
        {
            var list = _app.Sharepoint.Web.Lists.GetByTitle("New Employee");
            var query = new CamlQuery();
            query.ViewXml = "<View></View>";

            var collection = list.GetItems(query);
            _app.Sharepoint.Load(collection, items => items.Include(
                item => item.Id,
                item => item.DisplayName,
                item => item.FieldValuesAsText));
            _app.Sharepoint.ExecuteQuery();

            return ConvertToDictionary(collection.GetById(itemId));
        }

        private Dictionary<string, object> ConvertToDictionary(ListItem item)
        {
            var dic = new Dictionary<string, object>();
            foreach (var pair in item.FieldValuesAsText.FieldValues)
            {
                dic.Add(pair.Key, pair.Value);
            }

            return dic;
        }

标签: c#sharepointlistitem

解决方案


所以我找到了解决方案。我不知道为什么它以前不起作用,但我想只要它现在起作用就可以了。

而不是使用给定的方法GetById / GetItemById我只是使用First解决它们。要么我错过了一些东西,要么这些方法被打破了。

public Dictionary<string, object> GetPendingEmployeeItem(int itemId)
    {
        var list = _app.Sharepoint.Web.Lists.GetByTitle("New Employee");
        var query = new CamlQuery();
        query.ViewXml = "<View></View>";

        var collection = list.GetItems(query);

        _app.Sharepoint.Load(collection);
        _app.Sharepoint.ExecuteQuery();

        return collection.First(item => item.Id.Equals(itemId)).FieldValues;
    }

推荐阅读