不支持获取指定错误的方法

时间:2017-04-24 12:37:56

标签: c# linq sharepoint csom

我有一个如下所示的linq代码

itemCol.Where(x => Convert.ToString(x[internalColumn]) == filter)
       .Select(x => x[internalColumn].ToString())
       .Distinct()
       .ToList();

itemCol是托管CSOM(ListItemCollection)中的Sharepoint List Item集合。我收到的错误如“不支持指定的方法”。

堆栈跟踪

  

at Microsoft.SharePoint.Client.ClientQueryable'1.GetEnumerator()

     

在System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)

     

at System.Linq.Enumerable.ToList [TSource](IEnumerable'1 source)

此问题仅在客户端计算机上发生,而不是在任何开发计算机中发生。

2 个答案:

答案 0 :(得分:0)

我有类似的问题

  

不支持指定的方法stacktrace:Microsoft.SharePoint.Client.ClientQueryable`1.GetEnumerator()(...)

我已经编写了这段代码,它可以在Windows Server环境中运行,但在我的Windows 10计算机上却没有:

SP.ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem, (....)
clientContext.ExecuteQuery();
var outlist = (collListItem
          .Select(item => new MyClass()
          {
              ID = Convert.ToInt32(item["ID"])
          }) as IEnumerable<MyClass>)
          .ToList();
return outlist;

我已经决定将解析集合添加到列表中,然后选择如下:

SP.ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem, (....)
clientContext.ExecuteQuery();
var outlist = (collListItem.ToList()
          .Select(item => new MyClass()
          {
              ID = Convert.ToInt32(item["ID"])
          }) as IEnumerable<MyClass>)
          .ToList();
return outlist;

我发现它here

答案 1 :(得分:0)

请参见Stephen Turner's answer。正如他写道:

  

之所以引起此问题,是因为Sharepoint集合类型不支持全部Linq表达式。为了解决这个问题,将其从Sharepoint集合转换为具有另一个.ToList()的通用列表,如下所示。

尝试:

itemCol.ToList()
   .Where(x => Convert.ToString(x[internalColumn]) == filter)
   .Select(x => x[internalColumn].ToString())
   .Distinct()
   .ToList();