如何将LINQ语句作为lambda传递

时间:2011-09-09 10:25:40

标签: linq entity-framework

我希望这不是一个非常基本的问题 - 我已经看过类似的问题,但似乎无法理解,所以我伸手去寻求帮助。

我正在使用我想要通用的存储库模式 - 这是我对通用的所有内容:

    static public IQueryable<T> Get(Func<IQueryable<T>> pred, uint page=0, uint pageSize=10)
    {
         return pred()
                .Skip((int)(page * pageSize))
                .Take((int)pageSize);
    }

所以我想调用它,但是对于我尝试的任何lambda,都会得到一个“无效的参数”。

如果我声明一个返回IQueryable的方法并将其作为第一个参数传入,则无效编译错误。我很难过。

请帮帮忙?用lambda调用它的正确方法是什么?或者,如果我的仿制品不合适,最好如何声明它?我假设一个返回IQueryable的Func最好......

2 个答案:

答案 0 :(得分:0)

Get缺少T generic

static public IQueryable<T> Get<T>(Func<IQueryable<T>> pred, uint page = 0, uint pageSize = 10)
        {
            return pred()
                   .Skip((int)(page * pageSize))
                   .Take((int)pageSize);
        }

答案 1 :(得分:0)

通常情况下,只需要接受Func<IQueryable<T>>,,您就可以使用IQueryable<T>直接使用{<1}}。

static public IQueryable<T> Get<T>(IQueryable<T> source, uint page=0, uint pageSize=10) 
{ 
     return source 
            .Skip((int)(page * pageSize)) 
            .Take((int)pageSize); 
}