LINQ C#除了一个列表中的项目

问题描述

我有帖子表:

Id  ReplyId
1   null
2   1
3   null
4   3
5   null

posts包含所有这些项目。 我想排除Id = ReplyId的帖子,因此,我想获得ID为2,4,5的帖子。

换句话说,我们可以看到ReplyId = 1,那么我们需要从列表中删除ID = 1的帖子。另外,ReplyId = 3然后从列表中删除ID = 3的帖子。

我该如何实现?

解决方法

posts.Where(x => !posts.Any(y => y.ReplyId == x.Id))

测试:

void Main()
{
    var posts = new[] {
        new Post { Id = 1,ReplyId = null},new Post { Id = 2,ReplyId = 1},new Post { Id =3,new Post { Id = 4,ReplyId = 3},new Post { Id = 5,};


    var endItems = posts.Where(x => !posts.Any(y => y.ReplyId == x.Id));
    foreach (var element in endItems)
        Console.WriteLine(element.Id);
}

class Post
{
    public int Id { get; set; }
    public int? ReplyId { get; set; }
}
,

尝试一下:

var posts = new[]
{
    new { Id = 1,ReplyId = (int?)null,},new { Id = 2,ReplyId = (int?)1,new { Id = 3,new { Id = 4,ReplyId = (int?)3,new { Id = 5,};

var query =
    from p in posts
    join p2 in posts on p.Id equals p2.ReplyId into g
    where !g.Any()
    select p;

我得到:

query