我想发出一系列命令执行,但只有在前一个命令成功时才会发出.现在我在命令对象中引发一个事件,指示命令是成功还是失败.我用这个来控制执行,但感觉不够优雅.
例:
command1.CommandSucceeded += delegate { command2.Execute(); };
command1.Execute();
Run Code Online (Sandbox Code Playgroud)
这有效,但感觉笨拙和不直观.我可以在Execute()上传回一个布尔值,表示成功或失败,但这是沿着相同的路径.我可以在失败时抛出异常,这可能会导致更清晰的代码,但可能有点过分.
有什么建议?
我有一个LINQ语句从一个集合中提取前N个记录ID,然后是另一个查询,它提取所有具有这些ID的记录.它感觉非常笨重和低效,我想知道是否有更简洁,LINQy的方式来获得相同的结果
var records = cache.Select(rec => rec.Id).Distinct().Take(n);
var results = cache.Where(rec => records.Contains(rec.Id));
Run Code Online (Sandbox Code Playgroud)
仅供参考 - 将有多个具有相同ID的记录,这就是为什么有Distinct()以及为什么我不能首先使用简单的Take().
谢谢!
我正在尝试Resharper,我注意到它建议将实例级别字段设置为只读.例如:
private readonly IConnection _connection;
public RetrieveCommand(IConnection connection) {
_connection = connection;
}
Run Code Online (Sandbox Code Playgroud)
标记这样的字段有什么好处?
我花了一些时间试图弄清楚为什么这个查询没有拉出我预期的结果:
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
Run Code Online (Sandbox Code Playgroud)
最后我试着写查询另一种方式与这个最终得到预期的结果:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
Run Code Online (Sandbox Code Playgroud)
第一个查询似乎更合适并且"正确".我一直使用"in"和"not in"进行类似的选择,并且从未遇到过我所知道的问题.
我正在比较两个日期,并试图确定两个日期的最大值.空日期将被视为小于有效日期.我正在使用以下案例陈述,它有效 - 但感觉非常低效和笨重.有没有更好的办法?
update @TEMP_EARNED
set nextearn = case when lastoccurrence is null and lastearned is null then null
when lastoccurrence is null then lastearned
when lastearned is null then lastoccurrence
when lastoccurrence > lastearned then lastoccurrence
else lastearned end;
Run Code Online (Sandbox Code Playgroud)
(这是在MS SQL 2000,FYI.)