我有个员工表employee(string name,int departmentID),此处departmentID存的是部门ID,我还有一张部门表department(int departmentID,string departmentName),我现在做了一个列表界面要显示员工数据,列表中用的是datagridview控件,如果用Datatable查询的话,我只要关联表查询就可以了,但我现在不想用datatable,我想用实体类,如果这样的话,我的列表界面员工部门一栏肯定显示的是部门id,但我要显示的是部门名称,请问这种情况怎么处理?我看了nhibernate中处理的方法是在员工实体类中定义部门的映射,但这种方式,如果数据量大的话就会显示很慢,也有可能超时,我测试的时候查询15万条数据,说到这里有人会建议说这么多数据为什么不分页,我实际操作当中会考虑分页,但这里只是纯技术讨论,不考虑分页。
这种问题说白了也就是如何用实体类的方式展示多表查询的结果,请问你们是怎么做的?谢谢。

解决方案 »

  1.   

    返回DataTable数据,
    然后转化为List集合
      

  2.   

        struct employees
            {
                public int id{ get; set; }
                public string name{ get; set; }
                public string departmentName{ get; set; }
            }DataTable dt=DBHelper.getEmployeeList();
    List<employees> eList=mew List<employees>();
       for (int i = 0; i < dt.rows.count; i++)
                { 
    employees e=new  employees();
    e.name=dt.rows[0]["name"].tostring();
    e.departmentName=dt.rows[0]["departmentName"].tostring();
    eList.add(e);
       }
    datagridview.DataSource=eList;
      

  3.   

    樓上說+11.先把2個表關聯數據讀取出來放進datatable裏面,
    然後再把它轉成實體類;2.分別把2個表的數據讀取到2個datatable裏面,
    循環employee表轉化為實體類的時候,有部門id嘛,去department表內找對應的部門,給部門屬性賦值。
    這個方面不會快!
      

  4.   

    如果楼主使用 1、2楼的方法 建议楼主 组织数据的时候 将 <部门Id,部门名称> 记录下来
    下次优先查找这个集合,如果没有再去查找数据库。这样能节约一点时间
    我和三楼的意思差不多,但是这样两种方法用哪个取决于你的数据模式
    如果你的部门很多,而且每次用到的部门很少 那么用我的方法
    如果你的部门很少,而且基本上都用到了那么用3楼的方法