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]