使用linq

时间:2018-07-20 23:31:45

标签: c# linq

我具有以下类来存储来自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表达式转换为预期的委托类型,因为该块中的某些返回类型不能隐式转换为委托返回类型。

非常感谢您的帮助。

1 个答案:

答案 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));