小编Jos*_*osh的帖子

命令模式:按顺序执行多个命令

我想发出一系列命令执行,但只有在前一个命令成功时才会发出.现在我在命令对象中引发一个事件,指示命令是成功还是失败.我用这个来控制执行,但感觉不够优雅.

例:

command1.CommandSucceeded += delegate { command2.Execute(); };
command1.Execute();
Run Code Online (Sandbox Code Playgroud)

这有效,但感觉笨拙和不直观.我可以在Execute()上传回一个布尔值,表示成功或失败,但这是沿着相同的路径.我可以在失败时抛出异常,这可能会导致更清晰的代码,但可能有点过分.

有什么建议?

c# design-patterns command-pattern

8
推荐指数
1
解决办法
4251
查看次数

使用LINQ从另一个LINQ集合中获取结果

我有一个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().

谢谢!

c# linq

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

Resharper将字段更改为只读

我正在尝试Resharper,我注意到它建议将实例级别字段设置为只读.例如:

private readonly IConnection _connection;

public RetrieveCommand(IConnection connection) {
    _connection = connection;
}
Run Code Online (Sandbox Code Playgroud)

标记这样的字段有什么好处?

c# resharper readonly

5
推荐指数
2
解决办法
403
查看次数

为什么"不存在"SQL查询工作和"不存在"不工作

我花了一些时间试图弄清楚为什么这个查询没有拉出我预期的结果:

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"进行类似的选择,并且从未遇到过我所知道的问题.

sql t-sql sql-server-2008

5
推荐指数
1
解决办法
2594
查看次数

T-SQL更好的方法来确定最大日期(占空值)

我正在比较两个日期,并试图确定两个日期的最大值.空日期将被视为小于有效日期.我正在使用以下案例陈述,它有效 - 但感觉非常低效和笨重.有没有更好的办法?

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.)

t-sql

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