我有一个逗号分隔的字符串,需要将其分成可传递到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 Between语句将如下所示
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#做到这一点的最有效方法是什么?
以下将解决您的问题:
如果您的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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句