C# 如何传递函数<&燃气轮机;在具有联接的linq到sql中

C# 如何传递函数<&燃气轮机;在具有联接的linq到sql中,c#,.net,linq-to-sql,c#-4.0,C#,.net,Linq To Sql,C# 4.0,我有以下问题 我想传递一个func作为参数,以便它可以在where语句中变化 private IEnumerable<User> GetUser(int cant, Func<User, bool> userFilter, Func<Client, bool> ClientFilter) { return (from dcu in _db.All<User>().Where(us

我有以下问题

我想传递一个func作为参数,以便它可以在where语句中变化

   private IEnumerable<User> GetUser(int cant, Func<User, bool> userFilter, Func<Client, bool> ClientFilter)
    {
        return (from dcu in
                    _db.All<User>().Where(userFilter)
                join c in _db.All<Client>() on dcu.IdClient equals c.IdClient into temp
                from cli in temp.DefaultIfEmpty().Where(ClientFilter)
                select new {Usuer = dcu, Client = cli}).
            Take(cant).Select(uc => _usersMapper.Map(uc.User, uc.Client)).AsEnumerable();

    }

这是我创建的存储库实现的一个示例-Func方法应该足够了:

protected override IEnumerable<ContentType> FindImpl(Func<ContentType, bool> matchPredicate)
{
    return _context.ContentTypes.Where(matchPredicate);
}
protectedoverride IEnumerable FindImpl(Func matchPredicate)
{
返回_context.ContentTypes.Where(匹配谓词);
}

您需要将
中的
lambda设置为
过滤器
功能:

private IEnumerable<User> GetUser(int cant, Func<User, bool> filter)
{
    return (from dcu in _db.All<User>().Where(a => filter(a))
            join c in _db.All<Client>() on dcu.IdClient equals c.IdClient into temp
            from cli in temp.DefaultIfEmpty()
            select new {Usuer = dcu, Client = cli}).
        Take(cant).Select(uc => _usersMapper.Map(uc.User, uc.Client)).AsEnumerable();
}
private IEnumerable GetUser(int-cant,Func-filter)
{
返回(来自_db.All()中的dcu,其中(a=>filter(a))
将dcu.IdClient上的_db.All()中的c连接到temp中等于c.IdClient
从临时DefaultIfEmpty()中的cli
选择新建{Usuer=dcu,Client=cli})。
获取(铁路超高)。选择(uc=>_usersMapper.Map(uc.User,uc.Client)).AsEnumerable();
}

您是否尝试过将
表达式
作为参数?
其中
需要一个取1个参数并返回true的方法
GetUsers
不满足您发布的代码中的要求。
private IEnumerable<User> GetUser(int cant, Func<User, bool> filter)
{
    return (from dcu in _db.All<User>().Where(a => filter(a))
            join c in _db.All<Client>() on dcu.IdClient equals c.IdClient into temp
            from cli in temp.DefaultIfEmpty()
            select new {Usuer = dcu, Client = cli}).
        Take(cant).Select(uc => _usersMapper.Map(uc.User, uc.Client)).AsEnumerable();
}