如何在没有第二个LINQ查询的情况下获得排除的集合?

Chr*_*sto 1 c#

我有一个LINQ查询,如下所示:

 var p = option.GetType().GetProperties().Where(t => t.PropertyType == typeof(bool));
Run Code Online (Sandbox Code Playgroud)

获取未包含在此查询中的项目的最有效方法是什么,而不对列表执行第二次迭代.

我可以通过for循环轻松完成此操作,但我想知道是否有LINQ的简写.

kmc*_*000 10

var p = option.GetType().GetProperties().ToLookup(t => t.PropertyType == typeof(bool));

var bools = p[true];

var notBools = p[false];
Run Code Online (Sandbox Code Playgroud)

.ToLookup()用于基于键函数对IEnumerable进行分区.在这种情况下,它将返回一个Lookup,其中最多包含2个项目.可以使用类似于IDictionary的键访问Lookup中的项目.

.ToLookup() 立即计算并且是O(n)操作,并且在生成的Lookup中访问分区是O(1)操作.

Lookup与Dictionary非常相似,并且具有类似的通用参数(Key类型和Value类型).但是,在Dictionary将键映射到单个值的情况下,Lookup会将键映射到一组值.查找可以实现为IDictionary<TKey, IEnumerable<TValue>>

.GroupBy()也可以使用.但它不同于.ToLookup()GroupBy是懒惰评估的,并且可能被多次枚举..ToLookup()立即评估,工作只进行一次.