首页 新闻 会员 周边

EF中多表连接如何实现类似 SELECT * 的方法

0
悬赏园豆:20 [待解决问题]

比如有一个表中保存的 user_id , 前台需要user_id对应的name 

我用lambda

var rs = db.table1.join(

    db.user , 

    t => t.user_id , 

  u => u.id , 

   (t , u) => new {

       t , 

       username = u.name

   }

);

 

这样吧数据取回来 , 可是table1表中的内容都被包裹起来...返回JSON类似下面:

{

  t: {user_id:1 , ....其他的table1的字段} , 

  username: "xxxx"

}

 

我想能不能实现table的内容不被包裹 , 这个该如何实现呢???

除了 new {

  t.user_id , 

  ....其他table1的字段

  u.name

} 这样一个一个写出来,这样字段多了太麻烦了...

 

问题补充:

我目前用的方式

1. 如果需要连接的表很多 , 就用视图 , 可是这样就需要建视图

2. 如果比较少, 我就在表中加一个比如user_name的字段,不过不写入,只是在获取的时候赋值,类似:

db.table1.join(
  db.user , 
  t => t.user_id , 
  u => u.id , 
     (t , u) => new {
    t , u
  }
).ToList().Select ( p=> {
  //这里赋值
  t.username = u.name;
  return t;
});

不过这样就需要1. 在表中多设计一个字段 2.需要ToList后在Select...

 

不知道大家平时用什么方式...比较方便一些

让你笑了的主页 让你笑了 | 初学一级 | 园豆:103
提问于:2014-01-03 07:17
< >
分享
所有回答(5)
0

new 的时候 不把 t 放进去,不就没有被包裹

Yu | 园豆:12980 (专家六级) | 2014-01-03 09:00

可是那样就没有table1的信息了

我的意思是想 形成类似

select table1.* , u.name from table1 join user on user.id = table1.user_id;

 

支持(0) 反对(0) 让你笑了 | 园豆:103 (初学一级) | 2014-01-03 09:06

@让你笑了: 哦,没有 table1.* 的 ,只能一个一个写出来

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2014-01-03 09:26
0

这两个表之间有什么关联吗?如外键

Zery | 园豆:6151 (大侠五级) | 2014-01-03 09:15

有...table1中的user_id 对应 user中的id

支持(0) 反对(0) 让你笑了 | 园豆:103 (初学一级) | 2014-01-03 11:23

@让你笑了: 那直接用linq to entity的写法通过导航属性  user对象上应该有table1的导航属性

dbContext.User.Where(o=>o.id==userId).Include("table1").toList() 

这样就能取到userId 对应该到User对象 然后 User.table1就可以取到 User 对应的table1对象

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2014-01-03 11:39
0

你可以写一个类,派生自table1的实体类,加上一个name成员.

然后select的时候new派生类对量,并且给赋值就行了.

吴瑞祥 | 园豆:29449 (高人七级) | 2014-01-03 10:17

可是那样就需要把每个字段都写一遍啊....

支持(0) 反对(0) 让你笑了 | 园豆:103 (初学一级) | 2014-01-03 11:22
0

试试这个

http://www.cnblogs.com/humble/p/3380065.html

迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2014-01-03 16:12
0

没有办法,只能展开写

(t , u) => new {

       t.user_id,

       .... 

       username = u.name

   }

用视图是个折衷的办法,EF本来也不是这么玩的啊……

如果必须通过展开的方式来生成你需要的对象,那么本质上就说明你的设计有问题,或者说这个对象的映射或者不应该这么做。EF中可以做单表继承或者具表继承,你需要仔细考虑一下两张表的实际关系是怎样的,你所涉及的"Domain"是不是应该是一个层级的结构。

Ninja_Lu | 园豆:289 (菜鸟二级) | 2014-01-05 12:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册