Generics c#.Net

How to convert List To DataTable using generics to pass as tvp(Table-Valued Parameters) as parameter in stored procedures

How to convert List To DataTable using generics to pass as tvp(Table-Valued Parameters) as parameter in stored procedures, someone asked me to explain?

Very often we need to convert List to DataTable, so that we can pass DataTable to Stored Procedure as Paramter in the form of tvp. In this example i will show you how to convert List to datatable.

  public static DataTable ConvertToDataTable<TSource>(IEnumerable<TSource> source)
        {
            if (source == null)
                return null;
            var props = typeof(TSource).GetProperties();
            var dt = new DataTable();
            //dt.Columns.AddRange(pi.Name,Nullable.GetUnderlyingType(
            //pi.PropertyType) ??pi.PropertyType);
            dt.Columns.AddRange(
             props.Select(p => new DataColumn(p.Name, Nullable.GetUnderlyingType(p.PropertyType)?? p.PropertyType)).ToArray()
            );
           source.ToList().ForEach(
              i=> dt.Rows.Add(props.Select(p => p.GetValue(i, null)).ToArray())
            );
            return dt;
        }

 

Related Article

Post your comments / questions