接受谓词的C#方法 - 看起来好吗?

Ben*_*Ben 8 c# linq lambda func predicates

我想要一个具有以下API的方法:

//get all users with a role of admin
var users = myRepository.GetUsers(u => u.Role == Role.Admin);
Run Code Online (Sandbox Code Playgroud)

这样的事情会起作用吗?

IList<User> GetUsers(Func<User, bool> predicate)
{            
  var users = GetAllUsers();
  return users.Where(predicate).ToList();                                                          
} 
Run Code Online (Sandbox Code Playgroud)

如果是这样,我将能够指定更复杂的谓词,如(伪代码):

myRepository.GetUsers(u => u.CreatedDate is upto 14 days old);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 19

看起来绝对没问题.但是,如果要将谓词与LINQ to SQL一起使用,则需要使用:

IList<User> GetUsers(Expression<Func<User, bool>> predicate)
Run Code Online (Sandbox Code Playgroud)

这意味着lambda表达式将转换为表达式树而不是委托 - 然后表达式树可以转换为SQL.

  • +1该解释澄清了我对LINQ的理解百分之几.非常感谢.:) (2认同)