【问题标题】:Convert field from a Listitem to a List<T> using LINQ使用 LINQ 将字段从 Listitem 转换为 List<T>
【发布时间】:2023-04-05 04:31:01
【问题描述】:

我正在使用 CAML 查询 Sharepoint Online 数据库并获取它返回的必需 ListItemCollection。我只对此 ListItemCollection 的一个字段感兴趣,并将其转换为 List 以供另一个函数使用。有没有办法使用 LINQ 和 lambda 函数来做到这一点?

我当前运行良好的代码如下(listItems 是来自 Sharepoint 客户端命名空间的 ListItemCollection 类型)。

List<string> theList = new List<string>();

foreach(ListItem itm in listItems)  //listItems is type ListItemCollection
{
   theList.Add(itm["Email_x0020_Address"].ToString());
}

看起来应该是这样的

theList = listItems.ToList<string>(  i => i["Email_x0020_Address"].ToString()  );

theList = listItems.Cast<ListItem>().ToList<string>(i =>
               i["Email_x0020_Address"].ToString());

但我在转换时遇到了问题。任何帮助,将不胜感激!谢谢!

【问题讨论】:

    标签: c# linq sharepoint


    【解决方案1】:

    使用Select 将序列中的每个项目投影到另一个序列中(然后可以将其添加到列表中):

    var emails = items.Select(item => (string)item["Email_x0020_Address"])
        .ToList();
    

    【讨论】:

    • 啊……灯亮了。谢谢!
    【解决方案2】:

    感谢 Servy 的回答......它应该可以正常工作,但它会返回“不支持方法”错误。经过一番研究,微软论坛中还有另一个答案……我想它必须先成为一个 IEnumerable,然后是一个 List??

     List<string> theList = 
              (listItems.ToList().Select(item=>(string)item["Email_x0020_Address"]) as 
              IEnumerable<string>).ToList();
    

    或者像这样……

       List<string> theList = listItems.AsEnumerable().Select(item =>
                             (string)item["Email_x0020_Address"]).ToList();
    

    【讨论】:

      【解决方案3】:

      请尝试

      var emails = (from ListItem listItem in items.ToList()
                    select new Customer
                     {
                       EmailAddress = listItem["Email_x0020_Address"] != null ? 
                               listItem["Email_x0020_Address"].ToString() : string.Empty
                     }).ToList();
      

      List<Customer> lstCustomerEmails =
                     (from ListItem listItem in items.ToList()
                     select new Customer
                     {
                       EmailAddress = listItem["Email_x0020_Address"] != null ? 
                               listItem["Email_x0020_Address"].ToString() : string.Empty
                     }).ToList();
      

      【讨论】:

        猜你喜欢
        • 2011-10-27
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 2021-11-26
        • 1970-01-01
        相关资源
        最近更新 更多