在数据库有这么两个表:_data 和 _type
_data是主表:id emp name _type表: fk_id type
1 rb_01 张三 rb_01 一班
2 rb_02 李四 rb_02 一班
3 rb_03 王五 rb_03 二班
4 rb_04 赵六 rb_04 二班
我的问题就是如何用 linq 语句来获取 _data 主表中同一个班级的所有数据
假设方法的参数就是值为 rb_02 的string user , 我的解决方法是这样的:
var set = from u in db._data
orderby u.id
where getTypeByEmp(u.emp)==getTypeByEmp(user)
group u by new { emp = u.emp, name= u.name } into g
select new { g.Key.emp, g.Key.name };
getTypeByEmp这个方法是根据用户名获取类型,返回值是string类型的type
运行结果报错:LINQ to Entities 不识别方法“System.Object getUnitByUser(System.String)”,因此该方法无法转换为存储表达式。
求大神们帮解决,新手刚学习有些不太懂,,谢谢!!!
已知条件是user对吧
不能这么写的。
两个方法,一个是你JOIN _type表
另外一个是建一个视图,包含Type字段,这样前台的LINQ会显得简单一点。
嗯,user是已知条件
如果Join _type表的话,条件就是 a.emp = b.fk_id 这样查询出来的数据不就只有emp为 rb_02 的数据吗?
但我想的是通过 emp 所属的班级来进行查询,也就是说如果 user 是一班的话,就把 _data表里所有一班的数据都检索出来
我这么说大神能理解吧
@玩世不恭的雷寅: 没人让你先限制emp=rb_02的。你加的限制应该是
var type=gettypefromempy(user)
where condition=type
不会一句写完,写两句好了。
@爱编程的大叔:
var type = getTypeByEmp(user);
var set = from u in db._data
orderby u.id
where getTypeByEmp(u.emp)== type
group u by new { emp = u.emp, name= u.name } into g
select new { g.Key.emp, g.Key.name };
这样也不对呀,我的user=rb_02就好比是登录人id,我是从session里获取来的,我是想根据登录人所属几班的就让他显示出这个班级的数据来
@玩世不恭的雷寅: 说了要么视图,要么join。
类似这样,你自己写
from t1 in db.Table1 join t2 in db.Table2 on t1.field equals t2.field select new { t1.field2, t2.field3}
加条件 where t2.type=type
你不能把你自己的函数写在LINQ里面。
@爱编程的大叔: 奥,,,原来如此,,,,感谢大神的帮助