如何传递函数<>;在linq中用一个连接到sql
本文关键字:连接 sql 一个 lt 传递函数 gt linq | 更新日期: 2023-09-27 18:27:06
我有以下问题。
我想传递一个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"));
}
您需要将Where
lambda到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();
}
这是我创建的存储库实现的一个例子-Func方法应该足够了:
protected override IEnumerable<ContentType> FindImpl(Func<ContentType, bool> matchPredicate)
{
return _context.ContentTypes.Where(matchPredicate);
}