Hi Team,
I have datatable called DT_ValidRecords. It has around 10k records.
Now, i have to take the first 2000 records in loop and perform some actions and again 2000 and it goes on till it reaches the end.
The highlighted screenshot , for loop will take all the records in DT_ValidRecords, now i need only 2000 and again 2000.
Please help.
Regards,
Sharu
2 Likes
Anil_G
(Anil Gorthi)
March 9, 2023, 10:10am
2
@sharu_priya
You can use
Dt.AsEnumerable.Take(2000).CopyToDataTable to take the first 2000…
Subsequently dt.AsEnumerable.Skip(2000).CopyToDataTable will skip the first 2000 and take the remaining
To get 2000 each time…you can create a loop with how many have been picked up and how many are remaining by using rowcount on dt
Cheers
2 Likes
Yoichi
(Yoichi)
March 9, 2023, 10:21am
3
Hi,
FYI, another approach:
chunksize = 2000
then
arrDt = Enumerable.Range(0,(dt.Rows.Count \ chunksize) -CInt(dt.Rows.Count mod chunksize <>0)).Select(Function(i) dt.AsEnumerable.Skip(i*chunksize).Take(chunkSize).CopyToDataTable).ToArray
returns datatable array which has chunksize (2000) rows (the last item has remaining rows)
Then iterate this array.
Regards,
4 Likes
Hi @Yoichi , thanks for sharing, learned new thing. Correct me if I am not wrong on below explanation
The given code creates an array of data tables by splitting a given data table (dt) into chunks of a specified size (chunkSize). It first calculates the number of chunks required by dividing the total number of rows in dt by chunkSize and rounding it up to the nearest integer, then uses Enumerable.Range to generate a sequence of integers from 0 to the number of chunks minus 1. For each integer i in the sequence, it uses LINQ to skip the first i * chunkSize rows of dt, take the next chunkSize rows, and copy them into a new data table using CopyToDataTable. The resulting data tables are then stored in an array called arrDt.
2 Likes
Yoichi
(Yoichi)
March 9, 2023, 2:41pm
5
Hi,
I think your explanation is correct.
Regards,
1 Like
Anil_G:
CopyToDataTable
Hi Anil,
I understood it… Can you please explain how i need to use the Skip and take count
Anil_G
(Anil Gorthi)
March 10, 2023, 7:25am
7
@sharu_priya
Create a loop of total items using a counter…and continue loop till the counter reaches maximum row count
Counter =0 initially
And use condition as counter < dt.rowcount
Now in the loop use currentdt = dt.AsEnumerable.Skip(counter).Take(if(dt.Rowcount-counter<2000,dt.Rowcount-counter,2000)).CopyToDataTable
And in the loop increment counter counter = counter + 2000
Now for each iteration you get 2000 items and in last iteration you get how many ever are left
2 Likes
aliaga
(Ali Aga Mustofa)
March 10, 2023, 7:45am
8
Yoichi:
chunksize
Hi @Yoichi , @ABHIMANYU_THITE1 ,
Based on your explanation, i try to re-create the workflow.
Is this workflow correct?
Looping Data Chunks.zip (9.6 KB)
Regards
2 Likes
Can we achieve this dowhile?
Anil_G
(Anil Gorthi)
March 10, 2023, 9:34am
10
@sharu_priya
Yes we can acheive using do while…condition has to be placed in do while and increment and getting table to be done inside the do while…
Cheers
1 Like
system
(system)
Closed
March 13, 2023, 9:34am
11
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.