Mul*_*lki 11 c# lambda expression
我有一段代码,其中一段又一次使用lambda表达式.如何存储这个逻辑,以便我可以重用这个表达式?
例如:让我们以下面给出的代码为例
Session.Query<DimensionGroup>()(dimgroup=>(dimgroup.Users.Where(map =>
((map.User.Key == _users.PublicUser.Key || map.User.Key == _users.CurrentUser.Key) &&
map.AccessLevel.ToAccessLevel() == AccessLevel.Write)).Count() > 0));
Run Code Online (Sandbox Code Playgroud)
(map.User.Key == _users.PublicUser.Key || map.User.Key == _users.CurrentUser.Key) 是我想要重用的部分.
和一段类似的代码......
Session.Query<DimensionGroup>()(dimgroup =>(dimgroup.Users.Where(map => ((map.User.Key
==_users.PublicUser.Key || map.User.Key == _users.CurrentUser.Key) &&
map.AccessLevel.ToAccessLevel() == AccessLevel.Read)).Count() > 0));
Run Code Online (Sandbox Code Playgroud)
(map.User.Key
== _users.PublicUser.Key || map.User.Key == _users.CurrentUser.Key) 是我想要重用的部分.
有什么方法可以重用表达式的那些部分吗?
最简单的方法是重用单个 lamda 表达式,如下所示:
Expression<Func<User, bool>> KeysMatch =
map => map.User.Key == _users.PublicUser.Key
|| map.User.Key == _users.CurrentUser.Key;
Session.Query<DimensionGroup>()(dimgroup=>(
dimgroup.Users.Where(KeysMatch)
.Where(map => map.AccessLevel.ToAccessLevel() == AccessLevel.Write))
.Count() > 0
));
Run Code Online (Sandbox Code Playgroud)
下一步是通过调用 lambda 表达式来实际修改表达式树本身。这更复杂,除非您想深入了解它,否则使用工具包会更容易。我建议LinqKit。