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 后遇到的第一个棘手的问题,把经验分享出来,供大家参考、指点,如果有更好的方法,望高手指点留言
wcf+linq to sql中关联查询返回数据问题的更多相关文章
- LINQ TO SQL 中的join(转帖)
http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...
- Linq To Sql 语法 子查询 & In & Join
子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 =from cin ctx.Customers where ...
- linq to sql中的自动缓存(对象跟踪)
linq to sql中,对于同一个DataContext上下文环境,根据表主键选择记录时(当然这里所指的“记录”会自动转成“对象”),如果该记录已经被select过,默认情况下会被自动缓存下来,下次 ...
- SQL语句关联查询
一:连接类型: 关联查询:只有存在关联的表才能关联查询,完全独立的表之间无法关联 1.关联的类型:自关联,左关联,右关联,全关联(full join)两张表都是主表 2.关联的表:两张以上,以一张(或 ...
- JAVA-Unit03: SQL(基础查询) 、 SQL(关联查询)
Unit03: SQL(基础查询) . SQL(关联查询) 列别名 当SELECT子句中查询的列是一个函数 或者表达式时,那么查询出来的结果集 中对应的该字段的名字就是这个函数或者 表达式的名字.为此 ...
- THINKPHP 中关联查询(多表查询)
THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法,请看示例: 1.Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包 ...
- LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用
Ø 前言 LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并.取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> ...
- SQL中Between查询日期时需要注意的地方
SQL中Between查询日期时需要注意的地方 某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放 (1).例如数据 2009-01-22 ...
- Linq to sql中使用DateDiff()
Linq to sql中使用DateDiff() 计算时间差的方法 第一种办法: from p in PurchaseLists where EntityFunctions.DiffDays(p.Cr ...
随机推荐
- BZOJ 4415 发牌
线段树就好了啊. 为什么一眼splay啊... 其实splay也能过,但是线段树更方便? #include<iostream> #include<cstdio> #includ ...
- POJ 2084 Game of Connections
卡特兰数. #include<stdio.h> #include<string.h> ; ; void mul(__int64 a[],int len,int b) { int ...
- Java Cardioid 心脏形曲线 (整理)
package demo; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import jav ...
- spring.net IOC容器
spring.net 通过配置文件的方式 帮我们实现了IoC功能,实现方式非常灵活,且多种多样. 点击查看 创建对象 我们只需定义接口和实现方法,spring.net帮我们实现了其他功能. 第一步,定 ...
- mac os 系统密码正确的 但是进不了系统
今天开始重新学习C 但是一早起来开机进不了系统 密码明明正确的 无语了,后来打苹果售后电话解决了. 今天记录下如何解决的,以后万一又出现这种问题,至于原因嘛 我也不知道 有可能跟我装的双系统有关系.只 ...
- hadoop完全分布式模式的安装和配置
本文是将三台电脑用路由器搭建本地局域网,系统为centos6.5,已经实验验证,搭建成功. 一.设置静态IP&修改主机名&关闭防火墙(all-root)(对三台电脑都需要进行操作) 0 ...
- PHP String函数分类
1.查找字符位置函数: strpos ($str,search,[int]): 查找search在$str中的第一次位置从int开始: stripos ($str,search,[int]): ...
- android学习视频(实战项目演练)
1.基于Android平台实战无线点餐系统(客户端(Client)和服务端(Server))①http://kuai.xunlei.com/d/xmBrDwI8CAAyXVFRa3d②http://k ...
- IRequiresSessionState和IReadOnlySessionState应用上的一些差异
在调用ashx时,如果需要应用Session,则必须继承接口 IRequiresSessionState,IReadOnlySessionState,但根据字面,可以知道 IRequiresSessi ...
- 将a、b的值进行交换,并且不使用任何中间变量
方法1:用异或语句 a = a^b; b = a^b; a = a^b; 注:按位异或运算符^是双目运算符,其功能是参与运算的两数各对应的二进制位相异或,当对应的二进制相异时,结果为1.参与运算数仍以 ...