Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据多个表中的行数拆分数据集_C#_Datatable_Dataset - Fatal编程技术网

C# 根据多个表中的行数拆分数据集

C# 根据多个表中的行数拆分数据集,c#,datatable,dataset,C#,Datatable,Dataset,在这种情况下,我需要将数据集结果拆分为多个表,最终根据行数将其拆分为一个数组。 例如:我的数据集有34行带有url列,我需要将34行拆分为4个数据表(10,10,10剩余4个),并最终添加到数组中。我正在使用窗体windows应用程序。我尝试了下面的方法,但每次我向数组中添加记录时,它都会添加整个数据集。任何帮助都将不胜感激 private DataSet Process(DataSet ds) { string[] Array1 = new str

在这种情况下,我需要将数据集结果拆分为多个表,最终根据行数将其拆分为一个数组。 例如:我的数据集有34行带有url列,我需要将34行拆分为4个数据表(10,10,10剩余4个),并最终添加到数组中。我正在使用窗体windows应用程序。我尝试了下面的方法,但每次我向数组中添加记录时,它都会添加整个数据集。任何帮助都将不胜感激

 private DataSet Process(DataSet ds)
        {


            string[] Array1 = new string[10];
            string[] Array2 = new string[10];
            string[] Array3 = new string[10];
            string[] Array4 = new string[10];


            int COunt = ds.Tables[0].DefaultView.Count;
            int NoOfArraysToCreate = COunt/10 + 1;

            for (int i = 0; i <= NoOfArraysToCreate; i++ )
            {
                if (i == 0)
                {
                    foreach (DataRow drs in ds.Tables[0].Rows)
                    {
                        List<String> myList = new List<string>();
                        myList.Add(drs["Url"].ToString());
                        Array1 = myList.ToArray();
                    }
                }
                else if (i == 1)
                {
                    foreach (DataRow drs in ds.Tables[0].Rows)
                    {
                        List<String> myList = new List<string>();
                        myList.Add(drs["Url"].ToString());
                        Array2 = myList.ToArray();
                    }
                }
                else if (i == 2)
                {

                    foreach (DataRow drs in ds.Tables[0].Rows)
                    {
                        List<String> myList = new List<string>();
                        myList.Add(drs["Url"].ToString());
                        Array3 = myList.ToArray();
                    }
                }
                else if (i == 3)
                {

                    foreach (DataRow drs in dsURLsList.Tables[0].Rows)
                    {
                        List<String> myList = new List<string>();
                        myList.Add(drs["Url"].ToString());
                        Array4 = myList.ToArray();
                    }
                }

}
专用数据集进程(数据集ds)
{
字符串[]数组1=新字符串[10];
string[]Array2=新字符串[10];
字符串[]数组3=新字符串[10];
字符串[]数组4=新字符串[10];
int COunt=ds.Tables[0].DefaultView.COunt;
int noofaraystocreate=COunt/10+1;

对于(inti=0;i而言,您似乎正在遍历每个页面的所有数据表行。 我建议您只在行上循环一次:

私有列表进程(数据集ds,int pageSize)
{
列表结果=新列表();
int COunt=ds.Tables[0].DefaultView.COunt;
int noofaraystocreate=COunt/pageSize+1;
IEnumerable collection=ds.Tables[0].Rows.Cast();//我发现使用可枚举项更容易,因为它允许LINQ表达式,如下所示
for(int i=0;ir[“Url”].ToString()
.ToList());
}
Parallel.ForEach(结果,(第页)=>
{
Parallel.ForEach(page,(url)=>{});//并行处理字符串
});
return result;//我看到您将字符串数组转换回了DataSet,但由于我不知道表的定义,所以我只返回列表
}
void Main()
{
//这只是一个测试代码来说明我的观点,你的将有所不同
var ds=新数据集();
var dt=新数据表();
添加(“Url”,typeof(string));
对于(int i=0;i<34;i++){
dt.Rows.Add(Guid.NewGuid().ToString());//生成一些随机字符串,忽略我
}
ds.Tables.Add(dt);
//---------------------------------------
进程(ds,10);//调用您的方法
}
当然,使用for循环也有很多方法,但我将留给您去探索。
我还想说,将表号硬编码到您的方法中通常被认为是一种代码味道,但由于我不知道您的上下文,我不会对所有if块进行任何进一步的更改

,如果您正在循环遍历datatable的所有行并从中创建数组。我想要所有的数据(URL)在我的例子中,使用parallel.invoke并发处理这些URL,以加快检查它们状态的过程。目的是在数组中包含特定数据,并将其作为参数传递给多个方法,同时调用它们。在这里,您将列表定义为result[0],result[1]诸如此类。如果您愿意,您可以将它们转换回数组。我更新了答案,并提供了如何同时处理结果的选项。我想在这种情况下,您甚至不需要再拆分页面了?