gpt4 book ai didi

c# - 只有一个匹配属性的 MoreLinq ExceptBy

转载 作者:行者123 更新时间:2023-12-04 14:23:40 27 4
gpt4 key购买 nike

我有 2 个不同的项目,我正在尝试使用 more linq 库执行 except by 方法。两项之间唯一的共同点是一个名为 Symbol 的字符串。 Item 1 是元组列表,Item 2 是我用 linq 打开的数据库表

项目 1:

Tuple<string Symbol, string Market, List<Class1>, List<Class2>>

项目 2:

List<TableClass>

TableClass {
string Symbol;
decimal Price;
bool isSold; }

这是我尝试的代码。我正在尝试从 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 的对应项目>。对吧?

关于c# - 只有一个匹配属性的 MoreLinq ExceptBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50498861/

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