小编Whi*_*isk的帖子

有一种简单的方法可以将(lambda表达式)字符串解析为Action委托吗?

我有一个方法,根据传递给它的动作委托改变"帐户"对象:

public static void AlterAccount(string AccountID, Action<Account> AccountAction) {
  Account someAccount = accountRepository.GetAccount(AccountID);
  AccountAction.Invoke(someAccount);
  someAccount.Save();
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作......

AlterAccount("Account1234", a => a.Enabled = false);
Run Code Online (Sandbox Code Playgroud)

...但是现在我想尝试做的是这样的方法:

public static void AlterAccount(string AccountID, string AccountActionText) {
  Account someAccount = accountRepository.GetAccount(AccountID);
  Action<Account> AccountAction = MagicLibrary.ConvertMagically<Action<Account>>(AccountActionText);
  AccountAction.Invoke(someAccount);
  someAccount.Save();
}
Run Code Online (Sandbox Code Playgroud)

它可以像以下一样使用:

AlterAccount("Account1234", "a => a.Enabled = false");
Run Code Online (Sandbox Code Playgroud)

禁用帐户"Account1234".

我已经看过linq动态查询库了,它似乎或多或少地做了我想要的但是对于Func类型的委托,而我对表达式树等的了解并不是很好来弄清楚如何实现我的目标想.

有没有一种简单的方法可以做我想要的,或者我是否需要正确学习表达式并编写大量代码?

(我想这样做的原因是允许从powershell脚本中批量更新帐户对象的简单方法,其中用户可以指定lambda表达式来执行更改.)

.net c# linq parsing expression-trees

14
推荐指数
1
解决办法
2万
查看次数

检测数据库访问

杰夫在其中一个播客中提到,他总是做的其中一件事就是放入数据库调用的工具中,以便他可以判断哪些查询导致缓慢等等.这是我过去使用SQL Profiler测量过的,但是我对其他人习惯将此作为应用程序的一部分包含在内的策略感兴趣.

它只是在每个数据库调用中包含一个计时器并记录结果的情况,还是有一种"整洁"的方式呢?也许有一个框架已经为你做了这个,或者是否有一个我可以启用的标志,例如Linq-to-SQL,它将提供类似的功能.

我主要使用c#,但也有兴趣看到来自不同语言的方法,并且我对通过像SQL Profiler这样的数据库平台方法执行此操作的"代码"方式更感兴趣.

database logging instrumentation

6
推荐指数
1
解决办法
349
查看次数