我有一个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()立即评估,工作只进行一次.