2014-10-30 89 views
0

这看起来似乎很主观,但我正在寻找那些喜欢设置或至少是设置编码标准的人的答案。SQL&C#搜索记录并期望记录或一组记录?

在C#中,当通过非主键索引搜索单个记录时,您应该期待什么类型的结果?

如果您:

select * from tablename where [email protected] 

作为实践的问题,你应该代码逻辑期待一个IEnumerable列表或单个记录?

如果你真的只期望一条记录,那么SQL是否应该使用TOP 1?如下图所示:

select Top 1 * from tablename where [email protected] 
+0

什么将包含不是(也以某种方式)可枚举的单个记录? - 因此,您可以阅读()以获取第一行,然后选择是否要确保没有更多数据,并根据需要处理该潜在严重问题。 – 2014-10-30 14:37:41

+0

确实,任何单个项目总是可以在其类型列表中表示。把这看作一种​​标准的思维模式*是否很好?可以这么说吗? – 2014-10-30 14:42:01

+0

@naathon - 在通过电子邮件查找用户时,没有其他标准可以应用。 – 2014-10-30 14:43:24

回答

1

我想,而不是想着你期待,更好的办法是什么来看看,这是构建您的查询,这样你得到你想要什么。如果您只对零个或一个潜在匹配感兴趣,那么TOP(1)肯定会起作用。虽然我可能会添加某种类型的排序条款。

但是,如果您想要零个或更多,那么第一种方法更好。

只要基于非唯一值查询,您总是可以返回多条记录。当然,今天这个查询只能得到一个。然而,在未来的某个时刻,一个未被发现的变化将会发生,并且突然之间你会得到多行。

+0

“你不能总是得到你想要的东西”(我不会唱歌,但是......)那么,如果超过1条记录可以被解释为应用程序错误,那么可以记录和抛出该条件以避免问题这种状态加剧了吗? – 2014-10-30 14:33:32

+1

@RobertAchmann:它可以,但真正的问题是这是否构成实际的错误。如果确实如此,那么列或许应该是记录唯一键的一部分。 – NotMe 2014-10-30 15:10:26