yyw84 发表于 2013-1-27 06:16:08

IList<T> 转换成 DataSet

     通过 NHibernate 查询返回的表数据通常都是IList<T>,但在实际使用中有些数据控件在数据绑定上对IList的支持并不是很好,所以有时候将IList转换成DataSet还是有必要的。在Vinson的Blogs中提到了怎么将IList转换成DataSet,可惜源码是VB.NET的。
      下面是我根据IList转换成DataSet中的VB.NET源码转换成C#,由于现在做项目是用 VS 2005 ,所以也对其改进,让它支持C#2.0 中的泛型。

代码如下:<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">http://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifhttp://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gif<span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff;" /><span style="display: none;">
<!---->http://www.agoit.com/Images/OutliningIndicators/None.gifusing System;
http://www.agoit.com/Images/OutliningIndicators/None.gifusing System.Data;
http://www.agoit.com/Images/OutliningIndicators/None.gif
http://www.agoit.com/Images/OutliningIndicators/None.gifpublic class NHibernateHelper
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gifhttp://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif    /**//// <summary>
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    /// Ilist<T> 转换成 DataSet
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    /// </summary>
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    /// <param name="list"></param>
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    /// <returns></returns>
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif    public static DataSet ConvertToDataSet<T>(IList<T> list)
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif    http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        if (list == null || list.Count <= 0)
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif        http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif            return null;
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif        }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        DataSet ds = new DataSet();
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        DataTable dt = new DataTable(typeof(T).Name);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        DataColumn column;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        DataRow row;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        foreach (T t in list)
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif        http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif            if (t == null)
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif            http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                continue;
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif            }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif            row = dt.NewRow();
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif            for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif            http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                System.Reflection.PropertyInfo pi = myPropertyInfo;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                string name = pi.Name;
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                if (dt.Columns == null)
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.agoit.com/Images/OutliningIndicators/ContractedSubBlock.gif                http://www.agoit.com/Images/dot.gif{
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                    column = new DataColumn(name, pi.PropertyType);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                    dt.Columns.Add(column);
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif                }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif                row = pi.GetValue(t, null);
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif            }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif            dt.Rows.Add(row);
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif        }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        ds.Tables.Add(dt);
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif        return ds;
http://www.agoit.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.agoit.com/Images/OutliningIndicators/InBlock.gif
http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockEnd.gif}
页: [1]
查看完整版本: IList<T> 转换成 DataSet