如何解决使用CSOM c#在一次Go中加载multipe共享点列表项字段
***ctx.Load(listItemCollection,eachItem => eachItem.Include(
item => item,item => item["Column1"],item => item["Column2"]
));***
我有一个字符串数组而不是column1和column2的字段列表,我如何在include linq中传递它,无法在运行时创建适当的lambda。我尝试了以下方法,但没有成功。静态befor循环可以工作,但是循环中添加的字段失败,因为它不评估循环中的字符串值
***Expression<Func<ListItem,object>>[] paramss = new
Expression<Func<ListItem,object>>[length];
paramss[0] = x => x.ContentType;
paramss[1] = x => x["Title"];
count = 2;
foreach (string item in solConnDefModel.Columns)
{ paramss[count] = x => x[item];
count++;
}***
解决方法
请参考以下代码:
List dlist = context.Web.Lists.GetByTitle("listname");
context.Load(dlist);
context.ExecuteQuery();
string[] fieldNames = { "Id","Title","num","mStartDate" };
// Create the expression used to define the fields to be included
List<Expression<Func<ListItemCollection,object>>> fieldsToBeIncluded = new List<Expression<Func<ListItemCollection,object>>>();
foreach (string s in fieldNames)
{
fieldsToBeIncluded.Add(items => items.Include(item => item[s]));
}
// Initialize the collection of list items
var listItems = dlist.GetItems(new CamlQuery());
context.Load(listItems,fieldsToBeIncluded.ToArray());
context.ExecuteQuery();
您可以将鼠标悬停在load
方法上以查看所需的类型参数,然后生成一个对应的参数并将其传递。
我必须在运行时创建lambda表达式。以下代码我能够获得期望值
Expression
foreach (string item in Columns)
{
if (item.ToLower() != "contenttype")
{
ParameterExpression parameter = Expression.Parameter(typeof(ListItem),"x");
var propertyInfo = typeof(ListItem).GetMethod("get_Item");
var arguments = new List<Expression> { Expression.Constant(item) };
var expression = Expression.Call(parameter,propertyInfo,arguments);
var lambda = Expression.Lambda<Func<ListItem,object>>(expression,parameter);
paramss[count] = lambda;
}
else
{
paramss[count] = x => x.ContentType;
}
count++;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。