我如何存储和重用我的lambda表达式

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) 是我想要重用的部分.

有什么方法可以重用表达式的那些部分吗?

Chr*_*man 5

最简单的方法是重用单个 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