如何通过join加速此LINQ查询? - c#

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

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.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;

在Linq-to-objects中,联接将在联接属性上创建Lookup<TKey,TElement>,这将在匹配sourcetarget时提高性能。假设此结果是在有限的结果集上得出的,它应该可以使原始代码有所改善。当然,如果由于name两端都包含非常有限的值范围而导致许多匹配,则性能根本不会受到太大影响。

作为参考,请参见juharr在下面的注释中提供的the link to the Enumerable.cs源代码。

LeetCode题解494.target-sum

题目地址 https://leetcode.com/problems/target-sum/description/ 题目描述 You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For…

使用-source 8或更高版本来启用lambda表达式[重复] - java

This question already has answers here: Specifying java version in maven - differences between properties and compiler plugin (3个答案) 去年关闭。 当我尝试运行Maven构建时遇到构建错误。我创建了一个包含lambda函数的简单J…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可