找到列表中没有的任何数字

时间:2016-04-16 10:28:55

标签: c# sql sql-server

我需要找到列表中没有的任何数字。它可以是负值或正值。看看下表:

+----+--------+---------------------+
| id | sorder | Name                |
+----+--------+---------------------+
| 1  | 2      | Chevy               |
+----+--------+---------------------+
| 2  | 78     | Michilin            |
+----+--------+---------------------+
| 3  | -34    | XM                  |
+----+--------+---------------------+
| 4  | 97     | Manual Transmission |
+----+--------+---------------------+
| 5  | 3911   | Halogen             |
+----+--------+---------------------+

鉴于此查询结果,我必须找到sorder内没有的任何数字。 sorder可以是任何负数或正数。如果可能的话,我想使用sql来查找结果。这是我想要的结果集:

+----+--------+---------------------+
| id | sorder | Name                |
+----+--------+---------------------+
| 1  | 2      | Chevy               |
+----+--------+---------------------+
| 2  | 78     | Michilin            |
+----+--------+---------------------+
| 3  | -34    | XM                  |
+----+--------+---------------------+
| 4  | 97     | Manual Transmission |
+----+--------+---------------------+
| 5  | 3911   | Halogen             |
+----+--------+---------------------+
| 6  | 690    | Valvoline 5w30      |
+----+--------+---------------------+

1 个答案:

答案 0 :(得分:1)

假设你有一个List,你可以做其中任何一个。

选项1

正如 Jon Skeet 在列表中指出的那样,取Max并添加1.

int maxSOrder = objecList.Max(s=>s.sorder);
int nextIndex = maxSOrder +1;

选项2

如果您正在寻找从最小数量中找到最小可用索引的解决方案,您可以这样做。

int minSOrder = objecList.Min(s=>s.sorder);
int maxSOrder = objecList.Max(s=>s.sorder);
int minNotInList = Enumerable.Range(minSOrder, maxSOrder-minSOrder)
                             .FirstOrDefault(f=> !objectList.Any(o=>o.sorder == f);

if(minNotInList ==0)  // just fallback logic, when default is used
{ 
    minNotInList = maxSOrder +1; 
}