我使用CAML查询Sharepoint Online数据库并获取它返回的必需ListItemCollection。我只对这个ListItemCollection的一个字段感兴趣,并将其转换为List< T>供另一个功能使用。有没有办法使用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());
但是我在转换时遇到了问题。任何帮助,将不胜感激!谢谢!
答案 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();