Как передать func <> в linq в sql с объединением - PullRequest
1 голос
/ 08 марта 2012

У меня следующая проблема.

Я хочу передать 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();

    }

И функция должна выглядеть следующим образом

    public void GetUsers ()
    {
        GetUser(50, u => u.Email.Contains("onemail@mail.com"), c=> true);
    }
    public void GetUsersFilterByClient ()
    {
        GetUser(50, u => true, c=> c.Password.Contains("MyPasssword"));
    }

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Вам необходимо лямбда-код вашего Where в функцию filter:

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();
}
0 голосов
/ 08 марта 2012

Это пример из реализации репозитория, которую я создал - подход Func должен быть достаточным:

protected override IEnumerable<ContentType> FindImpl(Func<ContentType, bool> matchPredicate)
{
    return _context.ContentTypes.Where(matchPredicate);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...