求一方法将linq查询出的结果IQueryable类型 转换为DataTable类型
如下:
public static IQueryable<Teachers> List(int depID,string teacherName)
  {
  KymisDataContext ky = new KymisDataContext();  IQueryable<Teachers> teacherList;  teacherList = from teacher in ky.Teachers
  where (teacher.DepID == depID || depID == 0)
  && (teacher.TeacherName.Contains(teacherName) || teacherName == "")
  select teacher;
  return teacherList;
  }ss=list(depid,tname);DataTable dt=new DataTable();
dt=ConvertToDataTable(ss);现在求方法ConvertToDataTable 谢谢各位前辈赐教!

解决方案 »

  1.   

    http://space.cnblogs.com/question/3272/
      

  2.   

    public static DataTable ConvertToDataTable(this IEnumerable enumerable)
    {
        var dataTable = new DataTable();
        foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(T))) {
               dataTable.Columns.Add(pd.Name, pd.PropertyType);
        }
        foreach (T item in enumerable) {
               var Row = dataTable.NewRow();
                   
           foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))  {
                     Row[pd.Name] = pd.GetValue(item);
           }
        dataTable.Rows.Add(Row);
       }
       return dataTable;}这个方法编译不能通过呀 试了下又不会改呢 请教高手帮忙看看
      

  3.   

    这是扩展方法,要放在静态类里面
    public static class test
    {
        public static DataTable ConvertToDataTable(this IEnumerable enumerable)
        {
            var dataTable = new DataTable();
            foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(enumerable.GetType()))
            {
                dataTable.Columns.Add(pd.Name, pd.PropertyType);
            }
            foreach (var item in enumerable)
            {
                var Row = dataTable.NewRow();            foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(enumerable.GetType()))
                {
                    Row[dp.Name] = dp.GetValue(item);
                }
                dataTable.Rows.Add(Row);
            }
            return dataTable;
        }
    }
    调用时 DataTable dt = ss.ConvertToDataTable();
      

  4.   

    如果是DataTable
    直接   
    var query = from a in dtTmp.AsEnumerable() select a;
    DataTable dt = query.CopyToDataTable();   
    即可,不需要其他转换。
      

  5.   

    -----------------------
    大哥,你这个CopyToDataTable()属性没有啊