You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ListItemCollection中的两个字段加载到DataTable中

实现SharePoint列表指定字段转DataTable的方法

核心思路很直接:先创建包含目标字段的DataTable,再遍历已获取的ListItemCollection,把每个条目的指定字段值填入DataTable即可。另外建议优化数据加载逻辑,只加载需要的两个字段,避免冗余数据、提升效率。

完整修改后的代码

static void Main(string[] args)
{
    string siteUrl = ConfigurationManager.AppSettings["SiteUrl"];
    string clientID = ConfigurationManager.AppSettings["ClientId"];
    string clientSecret = ConfigurationManager.AppSettings["ClientSecret"];

    // 1. 初始化目标DataTable,添加需要的两列
    DataTable dt = new DataTable();
    dt.Columns.Add("CompanyID", typeof(string)); // 类型根据SharePoint列表字段实际类型调整
    dt.Columns.Add("Reference", typeof(string)); // 类型根据SharePoint列表字段实际类型调整

    using (ClientContext cc = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, clientID, clientSecret))
    {
        Web site = cc.Web;
        List targetList = site.Lists.GetByTitle("Companies");

        CamlQuery query = new CamlQuery();
        query.ViewXml = "<View><Query><Where><Contains><FieldRef Name='CompanyID'/></Contains></Where></Query></View>";
        ListItemCollection collListItem = targetList.GetItems(query);

        // 2. 只加载需要的两个字段,减少数据传输量
        cc.Load(collListItem, items => items.Include(
            item => item["CompanyID"],
            item => item["Reference"]
        ));
        cc.ExecuteQuery();

        if (collListItem.Count == 0)
        {
            Console.WriteLine("未找到任何条目。");
        }
        else
        {
            // 3. 遍历ListItem,将指定字段值添加到DataTable
            foreach (ListItem targetListItem in collListItem)
            {
                DataRow row = dt.NewRow();
                // 字段名称必须和SharePoint列表的内部名称完全一致
                row["CompanyID"] = targetListItem["CompanyID"] ?? DBNull.Value;
                row["Reference"] = targetListItem["Reference"] ?? DBNull.Value;
                dt.Rows.Add(row);
            }

            // 验证导入结果
            Console.WriteLine($"共导入{dt.Rows.Count}条数据\n");
            foreach (DataRow row in dt.Rows)
            {
                Console.WriteLine($"CompanyID: {row["CompanyID"]}, Reference: {row["Reference"]}");
            }
            Console.ReadLine();
        }
    }
}

关键注意点

  • 列类型匹配:DataTable的列类型要和SharePoint列表字段的实际类型对应,比如CompanyID是数字类型就改成typeof(int)。
  • 字段名称准确性:必须使用SharePoint列表字段的内部名称,不是显示名称,否则会出现字段找不到的问题。
  • 空值处理:用?? DBNull.Value处理字段为空的情况,避免DataTable插入空值时报错。
  • 加载优化:通过Include指定要加载的字段,比默认加载所有字段更高效,尤其适合字段较多的列表。

内容的提问来源于stack exchange,提问作者CGarden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:40:13