使用LINQ将字段从Listitem转换为List <t>

时间:2015-05-08 19:43:17

标签: c# linq sharepoint

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

我当前的代码,运行正常,如下(listItems的类型为ListItemCollection,来自Sharepoint客户端命名空间)。

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());

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

感谢Servy的回答....它应该可以正常工作,但它不会支持&#34;方法#34;错误。经过一些更多的研究,在微软论坛上还有另一个答案......我想它必须首先成为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();

答案 2 :(得分:0)

请尝试

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();

OR

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();