使用 CSOM c# 在一个 Go 中加载多个共享点列表项字段

Load multipe sharepoint list item fields in one Go using CSOM c#

       ***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 表达式。以下代码我能够获得预期值

表达式>[] paramss = new 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++;
       }