gpt4 book ai didi

c# - 如何使用 join 加速 LINQ 查询?

转载 作者:行者123 更新时间:2023-12-02 09:40:29 26 4
gpt4 key购买 nike

我有两个对象模型集合,我正在比较每个属性的不平等性。

ObservableCollection<LayerModel> SourceDrawingLayers

...和:

ObservableCollection<LayerModel> TargetDrawingLayers

我收到了关于创建一般非等连接 LINQ 查询的很好的建议,并让它在我的应用程序中发挥了巨大的作用,但现在我想加快速度:

var onOffQuery = from target in TargetDrawingLayers
from source in SourceDrawingLayers
where target.Name == source.Name && target.OnOff != source.OnOff
select target;

我的理解是,我将查询乘以源图形中的项目数 * 目标图形中的项目数 * 目标图形的数量我填充到 TargetDrawingLayers 中。

我想使用 Join 加速此操作,但我遇到了 != 部分的问题。

我玩过这个:

var newQuery = from source in SourceDrawingLayers
join target in TargetDrawingLayers
on target.name
where target.OnOff != source.OnOff
select target;

但我在语法上遇到了困难。有人能让我走上正轨吗?

此外,这是否会带来显着的性能改进?

最佳答案

替换on target.nameon 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;
<小时/>

在 Linq-to-objects 中,连接将创建 Lookup<TKey,TElement> 在连接属性上,这将导致匹配 source 时的性能改进和target 。假设这会导致结果集受到限制,那么它应该稍微改进原始代码。当然,如果它导致许多匹配,因为 name两边的值范围非常有限,那么性能不会受到太大影响。

作为引用,请参阅the link to the Enumerable.cs juharr 在下面的评论中提供了源代码。

关于c# - 如何使用 join 加速 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59329792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com