Thursday, November 10, 2011

Convert Var variable LINQ Query to DataTable - 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Reflection;

namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)
{

DataTable dtTest = new DataTable();
dtTest.Columns.Add("Title", typeof(string));

DataRow dr = dtTest.NewRow();
dr["Title"] = "AAA";
dtTest.Rows.Add(dr);

DataRow dr1 = dtTest.NewRow();
dr1["Title"] = "BBB";
dtTest.Rows.Add(dr1);

DataRow dr2 = dtTest.NewRow();
dr2["Title"] = "CCC";
dtTest.Rows.Add(dr2);

var query = from m in dtTest.AsEnumerable()
group m by m["Title"] into g
select new { Title = g.Key, Count = g.Count() };

DataTable dt = LinqtoDataTablequery();

GridView1.DataSource = dt;
GridView1.DataBind();

}


public DataTable LinqtoDataTable(IEnumerable varlist)
{
  DataTable dtReturn = new DataTable();
// column names
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn;
foreach (T rec in varlist)
{
   // Use reflection to get property names, to create table, Only first time, others will follow
   if (oProps == null)
    {
        oProps = ((Type)rec.GetType()).GetProperties();
        foreach (PropertyInfo pi in oProps)
        {
           Type colType = pi.PropertyType;

            if ((colType.IsGenericType)(colType.GetGenericTypeDefinition()== typeof(Nullable)))
               {
                 colType = colType.GetGenericArguments()[0];
               }

          dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
        }
   }

  DataRow dr = dtReturn.NewRow();
 foreach (PropertyInfo pi in oProps)
 {
     dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
 }
 dtReturn.Rows.Add(dr);
}
return dtReturn;
}
}
}

Abstract Factory Vs Factory Method

Abstract Factory Provides an interface for creating families of related or dependent objects without specifying their concrete classes ...