只有一个匹配的 MoreLinq ExceptBy 属性
MoreLinq ExceptBy with only one matching property
我有 2 个不同的项目,我正在尝试使用 more linq 库执行 except by 方法。两项之间唯一的共同点是一个名为 Symbol 的字符串。第 1 项是元组列表,第 2 项是我用 linq
打开的数据库 table
项目 1:
Tuple<string Symbol, string Market, List<Class1>, List<Class2>>
项目 2:
List<TableClass>
TableClass {
string Symbol;
decimal Price;
bool isSold; }
这是我尝试的代码。我正在尝试 return Item1 中 Item2 中不存在的所有元素:
Item1.ExceptBy(Item2.Select(k => k.Symbol), e => e.Symbol);
这不起作用,因为 Item1 和 Item2 是完全不同的类型
The type arguments for method 'MoreEnumerable.ExceptBy(IEnumerable, IEnumerable, Func)' cannot be inferred from the usage. Try specifying the type
arguments explicitly.
我保留了一个方便的扩展方法来进行左外连接:
public static IEnumerable<TResult> LeftOuterJoin<TLeft, TRight, TKey, TResult>(
this IEnumerable<TLeft> leftSeq,
IEnumerable<TRight> rightSeq,
Func<TLeft, TKey> keySelectorLeft,
Func<TRight, TKey> keySelectorRight,
Func<TLeft, TRight, TResult> projectionSelector)
{
return leftSeq
.GroupJoin(
rightSeq,
keySelectorLeft,
keySelectorRight,
(leftItem, rightItems) => new { leftItem, rightItems })
.SelectMany(
x => x.rightItems.DefaultIfEmpty(),
(x, rightItem) => projectionSelector(x.leftItem, rightItem));
}
现在我们可以:
tuples.LeftOuterJoin(list, t => t.Symbol, k => k.Symbol, (t,k) => (t,k))
.Where(x => x.k == null)
.Select(x => x.t)
...这将为我们提供元组列表中具有 Symbol
属性 的所有项目,而在另一个列表中没有具有相同 Symbol
的对应项目].对吗?
我有 2 个不同的项目,我正在尝试使用 more linq 库执行 except by 方法。两项之间唯一的共同点是一个名为 Symbol 的字符串。第 1 项是元组列表,第 2 项是我用 linq
打开的数据库 table项目 1:
Tuple<string Symbol, string Market, List<Class1>, List<Class2>>
项目 2:
List<TableClass>
TableClass {
string Symbol;
decimal Price;
bool isSold; }
这是我尝试的代码。我正在尝试 return Item1 中 Item2 中不存在的所有元素:
Item1.ExceptBy(Item2.Select(k => k.Symbol), e => e.Symbol);
这不起作用,因为 Item1 和 Item2 是完全不同的类型
The type arguments for method 'MoreEnumerable.ExceptBy(IEnumerable, IEnumerable, Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
我保留了一个方便的扩展方法来进行左外连接:
public static IEnumerable<TResult> LeftOuterJoin<TLeft, TRight, TKey, TResult>(
this IEnumerable<TLeft> leftSeq,
IEnumerable<TRight> rightSeq,
Func<TLeft, TKey> keySelectorLeft,
Func<TRight, TKey> keySelectorRight,
Func<TLeft, TRight, TResult> projectionSelector)
{
return leftSeq
.GroupJoin(
rightSeq,
keySelectorLeft,
keySelectorRight,
(leftItem, rightItems) => new { leftItem, rightItems })
.SelectMany(
x => x.rightItems.DefaultIfEmpty(),
(x, rightItem) => projectionSelector(x.leftItem, rightItem));
}
现在我们可以:
tuples.LeftOuterJoin(list, t => t.Symbol, k => k.Symbol, (t,k) => (t,k))
.Where(x => x.k == null)
.Select(x => x.t)
...这将为我们提供元组列表中具有 Symbol
属性 的所有项目,而在另一个列表中没有具有相同 Symbol
的对应项目].对吗?