c#在多个列表之间查找相同的项目,但跳过空列表

c#在多个列表之间查找相同的项目,但跳过空列表,c#,list,C#,List,我有三张单子 List<User> filterRes1 = new List<User>(); List<User> filterRes2 = new List<User>(); List<User> filterRes3 = new List<User>(); 这是可行的,但是如果一个列表不包含任何内容,结果总是空的 我如何跳过空列表,仍然可以在多个列表之间获取comon

我有三张单子

        List<User> filterRes1 = new List<User>();
        List<User> filterRes2 = new List<User>();
        List<User> filterRes3 = new List<User>();
这是可行的,但是如果一个列表不包含任何内容,结果总是空的

我如何跳过空列表,仍然可以在多个列表之间获取comon项

另外,我如何检查列表是否为空,而不仅仅是“空”

谢谢大家!

new[]{filterRes1,filterRes2,filterRes3}
.Where(x=>x!=null&&x.Any())
.Aggregate((IEnumerable)null,(t,l)=>t==null?l:t.Intersect(l))
托利斯先生()

因此,在纯集合数学中,您试图找到3个集合的交集。如果其中一个集合为空,则不存在交点,这是正确的结果。所以,也许你想重构它来整合集合,然后寻找重复的集合?复制品会告诉你两组之间有交叉点。它不会告诉你复制品来自哪里,但这似乎不是你的问题

您可以使用.AddRange或.Concat功能,它们不会删除重复项,并将保持列表顺序


不要使用Union,因为这将删除重复项。

这是否回答了您的问题?你的
Aggregate
可以简化为
Aggregate((t,l)=>t.Intersect(l))
,但这与重复答案基本相同。
        decListWithFiltersFinal = filterRes1
            .Intersect(filterRes2)
            .Intersect(filterRes3).ToList();