gpt4 book ai didi

c# - 使用 linq 根据另一个列表的属性从列表中删除一个对象

转载 作者:行者123 更新时间:2023-11-30 23:00:42 25 4
gpt4 key购买 nike

我有以下类来存储来自 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));

但是我得到一个错误:

Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type.

非常感谢任何帮助。

最佳答案

试试这个,它应该从 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));

关于c# - 使用 linq 根据另一个列表的属性从列表中删除一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51451535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com