Kef*_*fka 3 c# linq observablecollection
我有两个对象模型的集合,我正在比较每个属性的不平等。
ObservableCollection<LayerModel> SourceDrawingLayers
Run Code Online (Sandbox Code Playgroud)
...和:
ObservableCollection<LayerModel> TargetDrawingLayers
Run Code Online (Sandbox Code Playgroud)
我收到了关于创建非 equijoin LINQ 查询的很好的建议,并且让它在我的应用程序中发挥了很大的作用,但现在我想加快速度:
var onOffQuery = from target in TargetDrawingLayers
from source in SourceDrawingLayers
where target.Name == source.Name && target.OnOff != source.OnOff
select target;
Run Code Online (Sandbox Code Playgroud)
我的理解是,我将查询乘以源图形*
中的项目*
数、目标图形中的项目数和我填充到的目标图形数TargetDrawingLayers
。
我想加速这个操作,Join
但我遇到!=
了它的一部分问题。
我玩弄这个:
var newQuery = from source in SourceDrawingLayers
join target in TargetDrawingLayers
on target.name
where target.OnOff != source.OnOff
select target;
Run Code Online (Sandbox Code Playgroud)
但我在语法上挣扎。有人可以用它让我走上正轨吗?
此外,这甚至会是显着的性能改进吗?
替换on target.name
为on source.name equals target.name
var newQuery = from source in SourceDrawingLayers
join target in TargetDrawingLayers
on source.name equals target.name
where target.OnOff != source.OnOff
select target;
Run Code Online (Sandbox Code Playgroud)
在 Linq-to-objects 中,连接将Lookup<TKey,TElement>
在连接属性上创建,这将在匹配source
和时提高性能target
。假设这导致受限结果集,它应该稍微改进原始代码退出。当然,如果它导致许多匹配,因为name
双方包含非常有限的值范围,那么性能根本不会受到太大影响。
作为参考,请参阅juharr 在下面的评论中提供的指向 Enumerable.cs源代码的链接。
归档时间: |
|
查看次数: |
122 次 |
最近记录: |