In earlier post we have seen how we can randomize
rows using sql server function “NewId()”.
 Now we will
explore way of randomizing rows in C# after retrieving them from database.
I am writing a console application to illustrate the
concept
My console application contain a class for generating
random number, in main program class I have a function to get dataset “GetDataSet” that emulate fetching data from SQL server using ADO.NET .
The Idea is to add one more row into retrieved record
set and put random number value there ,then based on this column sorting whole
datatable.
   I am using
LINQ to achieve it.       
Below is complete code for the same. 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataSet ds = GetDataSet();
             //Copying
A Schema of Existing Result Reset and adding one more column to 
            //save randomly
generated number
            DataTable Mydt = new DataTable();
            Mydt = ds.Tables[0].Clone();
            Mydt.Columns.Add("Randomizer", typeof(Int32));
            //Generate
specfied number of brandom numbers 
            var RandomList = RandomProvider.GetRandomSequence(100, ds.Tables[0].Rows.Count).ToList();
            //used
to keep track of row number in linq query
            int i=0;
            //doing
linq operations on datarow collection
             IEnumerable<DataRow> results =(
                                            from
                                               
row
                                            in
                                                ds.Tables["ExampleDt"].AsEnumerable()
                                            select
                                                
Mydt.Rows.Add(
                                                          
     new Object[] {
                                                                               
row["Id"].ToString(),
                                                                               
row["Name"].ToString(),
                                                                                row["City"].ToString(),
                                                                               
row["Company"].ToString(),
                                                                               
RandomList[i++]
                                                                            
}
                                                              
)
                                            ).ToList().OrderBy(x
=> x.Field<Int32>("Randomizer"));
            //Final
Output
             Mydt = results.CopyToDataTable();
        }
        public static DataSet GetDataSet()
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable("ExampleDt");
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("City", typeof(string));
            dt.Columns.Add("Company", typeof(string));
            DataRow drow1 = dt.NewRow();
            drow1["Id"] = 1;
            drow1["Name"] = "suresh";
            drow1["City"] = "Mumbai";
            drow1["Company"] = "ABC Pvt Ltd.";
            DataRow drow2 = dt.NewRow();
            drow2["Id"] = 2;
            drow2["Name"] = "Ramesh";
            drow2["City"] = "Nagpur";
            drow2["Company"] = "PQR Pvt Ltd.";
            DataRow drow3 = dt.NewRow();
            drow3["Id"] = 3;
            drow3["Name"] = "Jayesh";
            drow3["City"] = "Delhi";
            drow3["Company"] = "LMN Pvt Ltd.";
            DataRow drow4 = dt.NewRow();
            drow4["Id"] = 4;
            drow4["Name"] = "Mahesh";
            drow4["City"] = "Banglore";
            drow4["Company"] = "JKL Pvt Ltd.";
            dt.Rows.Add(drow1);
            dt.Rows.Add(drow2);
            dt.Rows.Add(drow3);
            dt.Rows.Add(drow4);
            ds.Tables.Add(dt);
            return ds;
        }
    }
     public static class RandomProvider
    {
        public static IEnumerable<int> 
GetRandomSequence(int maxNumber)
        {
            var random = new Random();
            while (true)
                yield return random.Next(maxNumber);
        }
        public static IEnumerable<int> GetRandomSequence(int maxNumber, int maxCount)
        {
            return GetRandomSequence(maxNumber).Take(maxCount);
        }
    }
}
No comments:
Post a Comment