wcf+linq to sql中关联查询返回数据问题

前段时间准备采用wcf+nh框架开发sl程序,发现采用nh开发不适合我的中型、并且快速开发项目,所以综合考量了下,决定采用wcf+linq to sql 。

但是此模式也有缺点,也是linq to sql的缺点,查询语句写起来比较复杂(),只有边摸索,边开发了。

所以第一步就是搭建wcf:,目前我采用的wcf寄宿在一个winform程序,并采用tcp协议(考虑效率问题)。

第二步:在wcf服务项目中添加linq to sql 类。

 

在实现wcf 时,我有个user表和rose表,两个表是关联表,usr表中外键是roseid,在查询用户时,需要关联rose表,由于通过linq to sql 创建的实体类,所以无法通过linq to sql 类实体了,网上搜了些资料,没找到办法,后来自己想到了两个办法:

(1)采用视图:即在数据库中再建一个user和rose的关联视图,然后通过linq tosql 实现此关联视图类及相应方法,此方法可行但是可能会遇到一个问题就是效率问题

(2)第二个方法就是自己建一个类user_rose(在wcf服务中建),这个类放需要从user表和rose表关联的字段的相应的属性,然后在wcf服务中利用linq tosql 查询,查询语句如下:

           MonitorDataClassesDataContext     db = new MonitorDataClassesDataContext();
            var query = from t_User in db.t_User
                        join t_Rose in db.t_Rose on t_User.RoseID equals t_Rose.RoseID into t_Rose_join
                        from t_Rose in t_Rose_join.DefaultIfEmpty()
                        where
                          t_User.UserID == userid
                        select new UserRose
                        {
                            UserID= t_User.UserID,
                            UserName= t_User.UserName,
                            PWD= t_User.PWD,
                            RoseID= t_User.RoseID,
                            fdsz= t_User.fdsz,
                            CreateDate= t_User.CreateDate,
                            SJDLID= t_User.SJDLID,
                            RoseName = t_Rose.RoseName
                        };
            return query.ToList<UserRose>();

经测试完全ok,这是采用wcf+ linq to sql 后遇到的第一个棘手的问题,把经验分享出来,供大家参考、指点,如果有更好的方法,望高手指点留言

posted on 2013-10-15 18:31  you Richer  阅读(240)  评论(0编辑  收藏  举报