我在 C# 中执行 sql 查询时遇到问题。当字符串在 IN CLAUSE 中包含超过 1000 个条目时,sql 查询会引发错误。字符串有超过 1000 个子字符串,每个子字符串由“,”分隔。
我想将字符串拆分为字符串数组,每个字符串数组包含 999 个以“,”分隔的字符串。
或者
如何在字符串中找到第 n 次出现的 ','。
我在 C# 中执行 sql 查询时遇到问题。当字符串在 IN CLAUSE 中包含超过 1000 个条目时,sql 查询会引发错误。字符串有超过 1000 个子字符串,每个子字符串由“,”分隔。
我想将字符串拆分为字符串数组,每个字符串数组包含 999 个以“,”分隔的字符串。
或者
如何在字符串中找到第 n 次出现的 ','。
使用实用程序代码将字符串从 SQL 服务器拉到数据集中
string 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];
我希望这有帮助。
您可以使用正则表达式和类的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;
要创建所需大小的字符串数组,您可以拆分字符串并使用 LINQGroupBy
对结果进行分区,然后将结果组连接在一起:
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 个逗号分隔的元素。
这个怎么样:
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());
}
也许是这样的:
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>
.
//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);
或者您可能会在字符串中找到索引,然后将其拆分为子字符串:
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
语句中的查询的必要性。
string foo = "a,b,c";
string [] foos = foo.Split(new char [] {','});
foreach(var item in foos)
{
Console.WriteLine(item);
}