【问题标题】:Get custom linq lambda for sorting获取用于排序的自定义 linq lambda
【发布时间】:2019-02-01 23:14:56
【问题描述】:

是否可以为 linq 排序返回自定义 lambda?

// This is how I usually order stuff
quarable.OrderBy(d => d.Something);
// This is the signature of OrderBy I'm aiming for
IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector)

我想要一个看起来像这样的结果

static class SortingDevicesFiltersMethods {
    public static Expression<Func<TSource, TKey>> GetLambda(this SortingDevicesFilters filter)
    {
        return (d => d.State);
    }
 }

可以这样称呼它

 quarable.OrderBy(someSortEnum.GetLambda());

这样的事情可能吗?

【问题讨论】:

  • 那你写的代码能用吗?
  • 由于您像静态方法一样调用扩展方法,因此您必须传递SortingDevicesFilters 参数
  • 抱歉打错了,不,代码不起作用。它也不编译。
  • 那你需要解释什么不能编译,什么不能工作,给我们错误信息等等。
  • 可能可以通过创建expression tree,但我们不知道SortingDevicesFilters 是什么或您想如何使用它来创建动态过滤器。

标签: c# linq lambda


【解决方案1】:

代码中唯一缺少的是工作签名。

Expression<Func<Device, Object >> GetLambda()

在我的例子中,SortingDevicesFilters 是一个枚举——通过适当的开关——返回适当的过滤器。

所以可以从函数中返回一个 linq lambda。

【讨论】:

  • 认真的吗?你是说你的问题是“is it possible to return class instance from a function”(因为Expression&lt;…&gt;是一个和其他类一样的类),答案是“是的”(显然)?
猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
相关资源
最近更新 更多