【问题标题】:Make Lambda expression with a generic data type C#使用通用数据类型 C# 制作 Lambda 表达式
【发布时间】:2018-10-23 16:38:08
【问题描述】:

我需要知道是否有可能有一个 lambda 表达式接收对象的通用日期类型,以便我可以使用字符串、int 或日期时间进行排序,实际上我有这个:

public virtual IEnumerable<T> GetMany(Expression<Func<T,int>> id, int page, int qty)
    {
        try
        {           
            int skip_ =  PaginationMetering(page, qty);

            return dbSet.OrderBy(id).Skip(skip_).Take(qty).ToList();
        }
        catch (Exception e)
        {
            throw e.InnerException ?? e;
        }
    }

我已经尝试过了,但我的问题是我无法在函数执行时进行数据类型转换:

public virtual IEnumerable<T> GetMany(Expression<Func<T,dynamic>> id, int page, int qty)
    {
        try
        {           
            int skip_ =  PaginationMetering(page, qty);

            return dbSet.OrderBy(id).Skip(skip_).Take(qty).ToList();
        }
        catch (Exception e)
        {
            throw e.InnerException ?? e;
        }
    }

如果可能,我该如何处理?这很重要,因为它可以防止我对多种类型的数据重复相同的功能

【问题讨论】:

  • dbSet 来自哪里?
  • 不能再添加一个类型参数吗? public virtual IEnumerable&lt;T, K&gt; GetMany(Expression&lt;Func&lt;T,K&gt;&gt; id, int page, int qty)?或者你能举一些例子来说明你是如何称呼它的吗?

标签: c# generics lambda


【解决方案1】:

我不知道您的 OrderBy 来自哪里,但对您自己的方法使用相同的签名。 例如:

public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector);

对于你的例子:

public virtual IEnumerable<TSource> GetMany<TSource, TKey>(Expression<Func<TSource, TKey>> id, int page, int qty)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多