下面是我搜集整理的解决方法,请有经验的兄弟谈谈哪个比较好?或者给一些更加适合的。谢谢~
--------------------------------------------------------------------------------
1、自己新建一个可以和结果记录集对应的实体类。
2、用视图。
3、多数据记录集用DataTable传
4、自己构建一个返回DataSet的方法

解决方案 »

  1.   

    进行多表查询?这不是在SQL语句中写的吗?跟三层架构有什么关系?
      

  2.   

    创建一个Stored Procedure,把结果放到实现定义好的DataSet里,或者用DataReader把结果读到一个ICollection<YourType>中。
    不用View,我觉得会影响速度。
      

  3.   

    1 如果你说的多表查询是只得简单的例如
      部门,员工   需要展示 员工的所在单位信息 这类问题的话,我会选择用实体类,将这些SQL的构建交给ORM完成,将实体类做成贫血模型。此时业务实体具备了简单的View功能(以下代码只是简单实例)//1   FullTypeName,2   TableName 
    [Entity("Models.Users",   "Users")] 
    EntityID(EntityIDType.Identity,   "Id") 
    public   class   User

        private   string   userName   =   string.Empty; 
                    //   1   数据库字段名称,2属性类型,3长度,4是否允许参加数据实体的操作 
                    [Field("UserName",typeof(string),60,true)] 
                    public   string   UserName 
                    { 
                            get   {   return   userName;   } 
                            set   {   userName   =   value;   } 
                    }                 private   int   id;                 [Field("id",   typeof(int),true)] 
                    public   int   Id 
                    { 
                            get   {   return   id;   } 
                            set   {   id   =   value;   } 
                    }                 private   int   departID;                 [Field("departID",   typeof(int),true)] 
                    public   int   DepartID 
                    { 
                            get   {   return   departID;   } 
                            set   {   departID=   value;   } 
                    }                 private   string   departName; 
                    /* 
                        DepartName   来源于Departs这个实体模型对象; 
                          此时   DeaprtName   属性   为不可修改,存在于Departs实体model   多对1的表间关系。 
                    */ 
                    [Field("DepartName",   typeof(string),false]                [Relation(Relation.ManyToOne,"Departs","DepartID"))] 
                    
                    public   int   DeaprtName 
                    { 
                            get   {   return   departName;   } 
                            set   {   departName=   value;   } 
                    }                 

    2.如果涉及到一些复杂的多表及联查询的,那么,我会采取
    建立视图,向客户端传递DataSet或DataTable的模式。因为,我不想再需要增加查询功能时,首先增加实体类,这样的修改,我会疯掉的。
      

  4.   

    谢谢楼上的。
    如果选用:4、自己构建一个返回DataSet的方法 
    这样对性能会有所影响~
      

  5.   

    DataTable
    好一些吧!
    o(∩_∩)o...学习来的
      

  6.   

    做个直接执行sql命令的类就算了
    爱查什么返回什么
      

  7.   

    1 用视图
    2 select ... into newtable.再在newtable里面找.
    3 把数据取道前端,自己写连接算法.
      

  8.   

    用了一个返回DataSet的方法,想怎么查就怎么查
      

  9.   

    我新建一视图,利用视图时还是利用DataSet向BLL层传递数据的。
              /// <summary>
            /// 显示所有用户
             /// </summary>
            /// <returns></returns>
            public DataSet UserList()
            {
                const string mycmd = "select * from VIEW1";
                DataSet myds = MySQL.ExecuteDataSet(CommandType.Text, mycmd, null);
                return myds;
            }一般我们不是利用对象传递数据的吗?就像这样
              /// <summary>
            /// 绑定角色下拉框
            /// </summary>
            /// <returns>basic_role</returns>
            public List<basic_role> DdlRolesBind()
            {
                const string mycmd = "select * from basic_role";
                List<basic_role> lBasicRole = new List<basic_role>();
                SqlDataReader mydr = MySQL.ExecuteReader(CommandType.Text, mycmd, null);
                while (mydr.Read())
                {
                    lBasicRole.Add(DdlRolesBindTurn(mydr));
                }
                return lBasicRole;
            }
      

  10.   

    对呀,我也遇到这样LZ的问题了,我都改用sql 直接调用数据访问层了 
      

  11.   

    今天我也遇到这个问题了,我想应该将SQL的多表查询语句放在BLL层中,因为多表查询在概念上可以算一个业务逻辑的问题。我个人概念就是,每一种多表查询查询也是一种对象,它描述了多个实体对象的关系。
      

  12.   

    SQL语句放在BLL中显示是不符合三层结构的规范的,BLL中理论上不应该出现SQL语句,SQL应该统一放到DAL中。否则,换数据库的时候还要改BLL,接口也就失去了意义,无法屏蔽具体的数据库实现。