比如有一个表中保存的 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...
不知道大家平时用什么方式...比较方便一些
new 的时候 不把 t 放进去,不就没有被包裹
可是那样就没有table1的信息了
我的意思是想 形成类似
select table1.* , u.name from table1 join user on user.id = table1.user_id;
@让你笑了: 哦,没有 table1.* 的 ,只能一个一个写出来
这两个表之间有什么关联吗?如外键
有...table1中的user_id 对应 user中的id
@让你笑了: 那直接用linq to entity的写法通过导航属性 user对象上应该有table1的导航属性
dbContext.User.Where(o=>o.id==userId).Include("table1").toList()
这样就能取到userId 对应该到User对象 然后 User.table1就可以取到 User 对应的table1对象
你可以写一个类,派生自table1的实体类,加上一个name成员.
然后select的时候new派生类对量,并且给赋值就行了.
可是那样就需要把每个字段都写一遍啊....
试试这个
http://www.cnblogs.com/humble/p/3380065.html
没有办法,只能展开写
(t , u) => new {
t.user_id,
....
username = u.name
}
用视图是个折衷的办法,EF本来也不是这么玩的啊……
如果必须通过展开的方式来生成你需要的对象,那么本质上就说明你的设计有问题,或者说这个对象的映射或者不应该这么做。EF中可以做单表继承或者具表继承,你需要仔细考虑一下两张表的实际关系是怎样的,你所涉及的"Domain"是不是应该是一个层级的结构。