我有一个模特:
public class Post
{
public int PostId { get; set; }
public string Description { get; set; }
}
我有两个清单:
List<Post> posts
List<Post> exceptions
我想删除&#34;帖子&#34;中的所有项目PostId与&#34;例外&#34;
中的项目匹配我试过了:
foreach (var post in posts)
{
if (exceptions.Where(x => x.PostId == post.PostId) != null)
{
posts.RemoveAll(x => x.PostId == post.PostId);
}
}
但我敢打赌,有一种更清洁的方法可以做到。
谢谢!
答案 0 :(得分:2)
只需获取您要保留的posts
并覆盖原始列表:
posts = posts.Where(p => !exceptions.Any(e => e.PostId == p.PostId).ToList();
答案 1 :(得分:0)
第一点:当你在帖子上做一个foreach时,你不能删除一个帖子。
你应该使用for循环代替。
第二点:在循环之前,在每个postid和包含th id的对象帖子之间使用一个映射。所以你的胜利不得不具有n ^ 2的复杂性。
答案 2 :(得分:0)
为了便于示例计算,我已经实现了两个列表来包含整数,而不是类对象,但逻辑是相同的。据我所知,您希望删除例外列表中可用的所有帖子对象。
List<int> posts = new List<int>() { -3, -2, -1, 0, 1, 2, 3 };
List<int> exceptions = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int> intersection = exceptions.Intersect(posts); /* returns the numbers that are both in the two lists */
posts.RemoveAll(p => intersection.Contains(p)); /* remove the numbers from 'posts' that are intersected (1, 2, 3 are removed) */