gpt4 book ai didi

c# - 创建 C# LINQ 可选连接扩展

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:02 25 4
gpt4 key购买 nike

我正在尝试为 Linq 做一个扩展,我可以将其与可选连接一起使用。我想我很接近,但我错过了一些东西。你能发现吗?

public static IQueryable<T> OptionalJoin<T>(this IQueryable<T> source, bool condition, 
Expression<IEnumerable<T>> TInner,
Expression<Func<T, object>> outerKeySelector,
Expression<Func<T, object>> innerKeySelector,
Expression<Func<IQueryable<T>, IEnumerable<T>, object>> resultSelector)
{
return condition ? source.Join(TInner, outerKeySelector, innerKeySelector, resultSelector) : source;
}

最佳答案

可选连接并没有多大意义。您的返回类型是 IQueryable<T> ,如果您想返回原始集合,这是正确的。但是如果你想加入一些东西,返回类型就必须改变。并且您不能拥有根据运行时条件返回不同编译时类型的方法。

正因为如此,我认为你试图做的事情是不可能的。

如果你有两个结果选择器,我能想象的唯一可行的方法是:一个在 condition 时。是真的,另一个是假的。而且它们都将返回相同的类型。

此外,您的代码中有几个错误,我已尝试修复。

public static IQueryable<TResult> OptionalJoin<TSource, TInner, TKey, TResult>(
this IQueryable<TSource> source,
bool condition,
IQueryable<TInner> innerCollection,
Expression<Func<T, TKey>> outerKeySelector,
Expression<Func<T, TKey>> innerKeySelector,
Expression<Func<TSource, TInner, TResult>> trueResultSelector,
Expression<Func<TSource, TResult>> falseResultSelector)
{
return condition
? source.Join(innerCollection, outerKeySelector, innerKeySelector, trueResultSelector)
: source.Select(falseResultSelector);
}

关于c# - 创建 C# LINQ 可选连接扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7948607/

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