日期:2014-05-17  浏览次数:20517 次

老问题:用三层架构时,如何进行多表联合查询?求一比较优秀的解决方法。
下面是我搜集整理的解决方法,请有经验的兄弟谈谈哪个比较好?或者给一些更加适合的。谢谢~
--------------------------------------------
1、自己新建一个可以和结果记录集对应的实体类。
2、用视图。
3、多数据记录集用DataTable传
4、自己构建一个返回DataSet的方法


------解决方案--------------------
进行多表查询?这不是在SQL语句中写的吗?跟三层架构有什么关系?
------解决方案--------------------
选1吧,1的效率最高,避免了装箱和拆箱操作,而且也容易添加事务锁
------解决方案--------------------
视图比较OO,
但有些数据库并不支持。
------解决方案--------------------
创建一个Stored Procedure,把结果放到实现定义好的DataSet里,或者用DataReader把结果读到一个ICollection<YourType>中。
不用View,我觉得会影响速度。

------解决方案--------------------
1 如果你说的多表查询是只得简单的例如
部门,员工 

需要展示 员工的所在单位信息 这类问题的话,我会选择用实体类,将这些SQL的构建交给ORM完成,将实体类做成贫血模型。此时业务实体具备了简单的View功能(以下代码只是简单实例)
C# code

//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;   } 
                } 

                
}

------解决方案--------------------
DataTable
好一些吧!
o(∩_∩)o...学习来的
------解决方案--------------------
视图
------解决方案--------------------
做个直接执行sql命令的类就算了。。。
爱查什么返回什么。。。
------解决方案--------------------
1 用视图
2 select ... into newtable.再在newtable里面找.
3 把数据取道前端,自己写连接算法.
------解决方案--------------------
用视图 

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