gpt4 book ai didi

c# - 通用 Linq OrderBy 函数的问题

转载 作者:太空狗 更新时间:2023-10-29 23:04:38 25 4
gpt4 key购买 nike

我在一篇帖子中看到了以下函数,它允许使用通用表达式对数据进行排序:

public static IOrderedQueryable<T> OrderBy<T, TKey>(
this IQueryable<T> source, Expression<Func<T, TKey>> func, bool isDescending) {
return isDescending ? source.OrderByDescending(func) : source.OrderBy(func);
}

当我尝试使用这个函数时,我收到一条错误消息“找不到类型或 namespace 名称“TKey”(是否缺少 using 指令或程序集引用?)”。我在这里做了一些愚蠢的事情但我想不通。

编辑:

在做了更多研究之后,我认为我的问题在于构建传递给它的表达式。是否可以构建一个可以包含不同类型的表达式?假设我的数据集有一个字符串、一个整数和一个 bool 值,我想使用上面的通用函数按任何项目排序。我该怎么做?

我现在有这个工作:

if (IsString)
{
Expression<Func<T, string>> expString = ...;
// call orderBy with expString
}
else if (IsInt)
{
Expression<Func<T, int>> expInt;
// call orderBy w/ expInt
}
:

我想要这样的东西:

Expression<Func<T, {something generic!}>> exp;
if (IsString)
exp = ...;
else if (IsInt)
exp = ...;
:
// call orderBy with exp

最佳答案

一个快速观察:您实际上并不需要使用 lambda 表达式 ( Expression<Func<T,TKey>> )。一个简单的委托(delegate) ( Func<T,TKey>) 就可以了。

也就是说,我认为您可能正在寻找的答案是:

Func<T,IComparable> func = null;
if (IsString)
func = (T a) => a.SomeStringValue;
else if (IsInt)
func = (T a) => a.SomeIntValue;
// call orderBy with exp

关于c# - 通用 Linq OrderBy 函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407243/

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