在T-SQL的模棱两可?

007*_*007 2 .net c# t-sql asp.net visual-studio

我有IF条件,

IF (this.Something.GID == 1)
{
Something = "something";
}
Run Code Online (Sandbox Code Playgroud)

我想说除了1之外我想再增加一个选项

IF (this.Something.GID **is 1 or 2**)
{
Something = "something";
}
Run Code Online (Sandbox Code Playgroud)

我该如何在C#中做到这一点?

Mat*_*eid 7

您可以使用数组并Contains:

var items = new int[] {1, 2};
if(items.Contains(this.something.GID))
{
}
Run Code Online (Sandbox Code Playgroud)

如果您在本地执行代码(没有转换为SQL的O/R LINQ),则HashSet可能在大量数据上执行得更好:

var items = new HashSet<int>();
items.Add(1);
items.Add(2);
// equivalent one-liner, thanks to Eren
// var items = new HashSet<int> { 1, 2 }
if(items.Contains(this.something.GID))
{
}
Run Code Online (Sandbox Code Playgroud)

如果你知道在编译时的所有元素,并且他们是的switch-支持型像int或者string,你应该去的马克与方法switch.

在使用 Contains

正如我在评论中读到的那样,进一步解释我的代码可能会有所帮助.基本上,代码相反的方式解决了您的问题:而不是检查是否a b,c 或者 d它检查集合是否{b, c, d} 包含 a(这是等效的).

在阵列和 HashSet

数组和a HashSet是两个不同的实现,可用于此问题.通常,您可以以比数组HashSet 更快的速度查找元素.

数组执行线性搜索,迭代遍历每个元素并检查它是否是所需元素(努力与数组的长度成线性关系).甲HashSet在阵列中存储的元素太.但是,当搜索元素,它计算一个整数哈希出想要的元素,并检查是否所述单个元件hash % array_length其内阵列中是有用元素(恒定努力).

您可以查看哈希表上的维基百科文章以获取更多详细信息(相当多的阅读,但非常有趣).

  • 另请注意,您可以使用集合初始化程序:`new HashSet <int> {1,2}`. (2认同)