これを SQL に変換するのではなく、クライアント側で行うことに満足している場合は、2 つの異なる型のシーケンスで動作するようにMoreLinq のメソッドを変更できます。ExceptBy
その後、あなたは呼び出すことができます
var modulelessBlocks =
allBlocks.Except(
allModuleBlocks,
block => block.MID,
moduleblock => moduleblock.MID);
これには、各ソースを 1 回だけ繰り返すという利点があります。
変更されたイテレータの例を次に示します。一致するように他のメソッドを変更する必要があります。
private static IEnumerable<TSource> ExceptByImpl<TSource, TSecond, TKey>(
this IEnumerable<TSource> first,
IEnumerable<TSecond> second,
Func<TSource, TKey> keySelectorSource,
Func<TSecond, TKey> keySelectorSecond,
IEqualityComparer<TKey> keyComparer)
{
HashSet<TKey> keys = new HashSet<TKey>(
second.Select(keySelectorSecond),
keyComparer);
foreach (var element in first)
{
TKey key = keySelectorSource(element);
if (keys.Contains(key))
{
continue;
}
yield return element;
keys.Add(key);
}
}