gpt4 book ai didi

c# - 实现通用 OrderBy 解决方案时遇到问题

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

我有一个方法需要 IQueryable<T>我想在其中一般地实现 OrderBy。理想情况下传入 c => c.SomeProperty in 作为参数,但我无法弄清楚如何让泛型对其进行处理,所以我尝试了一个字符串。但是我收到错误:

Incorrect number of parameters supplied for lambda declaration

这是我试过的(使用字符串方法)

var sortSelectorParameter = Expression.Parameter(typeof(T), "c");
var sortSelector = Expression.PropertyOrField(sortSelectorParameter, "ClientId"); // ClientId is the property string

collection = collection.OrderByDescending(Expression.Lambda<Func<T, bool>>(sortSelector));

我很困惑,因为 OrderBy 只接受一个参数 - 有什么建议吗?

最佳答案

您需要将参数传递给Expression::Lambda<T> ,如错误所述:

var sortSelectorParameter = Expression.Parameter(typeof(T), "c");
var sortSelector = Expression.PropertyOrField(sortSelectorParameter, "ClientId"); // ClientId is the property string

collection = collection.OrderByDescending(Expression.Lambda<Func<T, bool>>(sortSelector, sortSelectorParameter ));

lambda 的“正文”指的是参数 c ,由 ExpressionParameter 表示实例 sortSelectorParameter .您需要将此参数实例传递给 lambda,以便它知道主体引用的参数实际上是您希望创建的 lambda 的输入参数。

编辑:以上内容可能会回答您的技术问题,但不清楚您要在这里实现什么。如果您只想按您在编译时知道的东西进行排序,那么您不需要任何这些。包装 OrderByDescending 有什么意义? -方法?

IQueryable<TElement> MySpecialOrderBy<TElement, TKey>(IQueryable<TElement> source, Expression<Func<TElement, TKey>> keySelector)
{
return source.OrderByDescending(keySelector);
}

关于c# - 实现通用 OrderBy 解决方案时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369061/

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