我具有以下类来存储来自SharePoint的REST API调用的对象:
[Serializable]
public class DocumentSearchResult
{
public string TotalCount { get; set; }
public string DocumentPath { get; set; }
public string DocumentTitle { get; set; }
public string DocumentSize { get; set; }
public string DocumentAuthor { get; set; }
public string DocumentDescription { get; set; }
public string DocumentFileExtension { get; set; }
public double DocumentRank { get; set; }
public Int64 DocumentDocId { get; set; }
public Int64 DocumentWorkId { get; set; }
public DateTime DocumentWrite { get; set; }
public string DocumentParentLink { get; set; }
public DateTime DocumentLastModifiedDate { get; set; }
public string DocumentFileType { get; set; }
//These next set of properties are used for Viewing the results in embedded or preview
public string DocumentRedirectedEmbededURL { get; set; }
public string DocumentRedirectPreviewURL { get; set; }
public string DocumentRedirectURL { get; set; }
}
我在代码中创建了这些对象的列表:
var docReturnResult = new List<DocumentSearchResult>();
我还有另一个使用以下方法创建的列表:
var filterList = this.Where(x => x.TenantId == TenantId);
这将返回一个IQueryable列表,其中包含我需要过滤第二个列表的值。 filterList具有一个称为SharePointId(x => x.SharePointId)的属性,我需要使用该属性来过滤docReturnResult列表。因此,我需要将filterList SharePointId与docReturnResult DocumentDocId进行比较,并删除docReturnResult列表中与filterList中的SharePointId不匹配的所有对象。
这是我最后一次尝试的方法:
var trimResults = new DocumentSearchResult();
trimResults = docReturnResult.RemoveAll(x => x.DocumentDocId != filterList.Where(y => y.SharePointId));
但是我得到一个错误:
无法将lambda表达式转换为预期的委托类型,因为该块中的某些返回类型不能隐式转换为委托返回类型。
非常感谢您的帮助。
答案 0 :(得分:2)
尝试此操作,它应该从docReturnResult
中找不到匹配项的filterList
中删除所有文档
docReturnResult.RemoveAll(x => !filterList.Any(y => y.SharePointId == x.DocumentDocId));
错误的根本原因-
x.DocumentDocId != filterList.Where(y => y.SharePointId)
右侧将返回IQuarable对象,您正尝试将其与DocumentDocId进行比较,而这将不起作用。
修改
您不需要新的变量trmResults
,因为docReturnResult
上的RemoveALL会修剪相同的对象,因此您只需返回docReturnResult
return docReturnResult.RemoveAll(x => !filterList.Any(y => y.SharePointId == x.DocumentDocId));