我在C#中执行sql查询时遇到问题。当字符串在IN CLAUSE中包含超过1000个enteries时,sql查询会抛出一个错误。该字符串有超过1000个子字符串,每个子字符串用','分隔。< / p>
我想将字符串拆分为字符串数组,每个字符串包含由','分隔的999个字符串。
或
如何在字符串中找到','的第n个出现。
答案 0 :(得分:0)
使用
等实用程序代码将字符串从SQL Server拉入DataSetstring strResult = String.Empty;
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = strSQL;
strResult = cmd.ExecuteScalar().ToString();
}
从SQL Server获取返回的字符串
将字符串拆分为','
string[] strResultArr = strResult.Split(',');
然后获取由','分隔的第n个字符串(我认为这就是“我怎样才能在字符串中找到第n个出现','”使用
int n = someInt;
string nthEntry = strResultArr[someInt - 1];
我希望这会有所帮助。
答案 1 :(得分:0)
您可以使用正则表达式和Index
类的Match
属性:
// Long string of 2000 elements, seperated by ','
var s = String.Join(",", Enumerable.Range(0,2000).Select (e => e.ToString()));
// find all ',' and use '.Index' property to find the position in the string
// to find the first occurence, n has to be 0, etc. etc.
var nth_position = Regex.Matches(s, ",")[n].Index;
要创建所需大小的字符串数组,您可以拆分字符串并使用LINQ的GroupBy
对结果进行分区,然后将结果组连接在一起:
var result = s.Split(',').Select((x, i) => new {Group = i/1000, Value = x})
.GroupBy(item => item.Group, g => g.Value)
.Select(g => String.Join(",", g));
result
现在包含两个字符串,每个字符串包含1000个逗号分隔元素。
答案 2 :(得分:0)
这是怎么回事:
int groupSize = 1000;
string[] parts = s.Split(',');
int numGroups = parts.Length / groupSize + (parts.Length % groupSize != 0 ? 1 : 0);
List<string[]> Groups = new List<string[]>();
for (int i = 0; i < numGroups; i++)
{
Groups.Add(parts.Skip(i * groupSize).Take(groupSize).ToArray());
}
答案 3 :(得分:0)
也许是这样的:
string line = "1,2,3,4";
var splitted = line.Split(new[] {','}).Select((x, i) => new {
Element = x,
Index = i
})
.GroupBy(x => x.Index / 1000)
.Select(x => x.Select(y => y.Element).ToList())
.ToList();
在此之后,您应该String.Join
IList<string>
。
答案 4 :(得分:-1)
//initial string of 10000 entries divided by commas
string s = string.Join(", ", Enumerable.Range(0, 10000));
//an array of entries, from the original string
var ss = s.Split(',');
//auxiliary index
int index = 0;
//divide into groups by 1000 entries
var words = ss.GroupBy(w =>
{
try
{
return index / 1000;
}
finally
{
++index;
}
})//join groups into "words"
.Select(g => string.Join(",", g));
//print each word
foreach (var word in words)
Console.WriteLine(word);
或者您可以在字符串中找到indeces,然后将其拆分为子字符串:
string s = string.Join(", ", Enumerable.Range(0, 100));
int index = 0;
var indeces =
Enumerable.Range(0, s.Length - 1).Where(i =>
{
if (s[i] == ',')
{
if (index < 9)
++index;
else
{
index = 0;
return true;
}
}
return false;
}).ToList();
Console.WriteLine(s.Substring(0, indeces[0]));
for (int i = 0; i < indeces.Count - 1; i++)
{
Console.WriteLine(s.Substring(indeces[i], indeces[i + 1] - indeces[i]));
}
但是,如果可以在将条目组合成一个字符串之前使用它,我会考虑一下。并且可能认为,如果有可能阻止进行需要将优秀列表传递到IN
语句的查询的必要性。
答案 5 :(得分:-2)
string foo = "a,b,c";
string [] foos = foo.Split(new char [] {','});
foreach(var item in foos)
{
Console.WriteLine(item);
}