将逗号分隔的字符串分组为范围组2维数组

时间:2019-06-15 01:05:59

标签: c# asp.net arrays sql-server multidimensional-array

我有一个逗号分隔的字符串,需要将其分成可以传递给SQL Server的BETWEEN语句的数组范围。

例如,说我下面有以下字符串,我需要返回相应的returnVal;

string delimited = "1,2,5,6,7,8,11,12,13,15,16,17,18,19"; 
returnVal = int[,] ranges = new int[4, 2] { { 1, 2 }, { 5, 8 }, { 11, 13 }, { 15, 19 } };

然后,我的SQL之间的语句看起来像

WHERE (ID BETWEEN 1 AND 2) OR (ID BETWEEN 5 AND 8)  OR (ID BETWEEN 11 AND 13)  OR (ID BETWEEN 15 AND 19) 

而不是

ID IN(1,2,5,6,7,8,11,12,13,15,16,17,18,19)

我的实际定界字符串超过5000个ID,因此我需要使用BETWEEN语句而不是IN语句来提高效率。

使用C#最有效的方法是什么?

1 个答案:

答案 0 :(得分:2)

以下将解决您的问题:

如果int是定界字符串,则可以使用split将其转换为int数组。

var intArray = **array of integers**
var ranges = new List<List<int>>();

int? topRange = intArray[0];
int? lastId = null;
int bottomRange; 
foreach(int id in intArray)
{
    if(topRange == null)
    {
        topRange = id;
    }
    if (lastId != null && id != (lastId + 1))
    {
        bottomRange = lastId.Value;
        ranges.Add(new List<int>() { topRange.Value, bottomRange });
        topRange = id;
    }
    lastId = id;
}