首页新闻找找看学习计划

求教一个linq问题

0
[已解决问题] 解决于 2015-08-14 11:00

在数据库有这么两个表:_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)”,因此该方法无法转换为存储表达式。

求大神们帮解决,新手刚学习有些不太懂,,谢谢!!!

玩世不恭的雷寅的主页 玩世不恭的雷寅 | 初学一级 | 园豆:38
提问于:2015-08-14 09:42
< >
分享
最佳答案
0

已知条件是user对吧

不能这么写的。

两个方法,一个是你JOIN _type表

另外一个是建一个视图,包含Type字段,这样前台的LINQ会显得简单一点。

奖励园豆:5
爱编程的大叔 | 高人七级 |园豆:29788 | 2015-08-14 09:54

嗯,user是已知条件  

如果Join _type表的话,条件就是 a.emp = b.fk_id   这样查询出来的数据不就只有emp为 rb_02 的数据吗?

但我想的是通过 emp 所属的班级来进行查询,也就是说如果 user 是一班的话,就把 _data表里所有一班的数据都检索出来

我这么说大神能理解吧

玩世不恭的雷寅 | 园豆:38 (初学一级) | 2015-08-14 10:02

@玩世不恭的雷寅: 没人让你先限制emp=rb_02的。你加的限制应该是

var type=gettypefromempy(user)

 

where condition=type

不会一句写完,写两句好了。

爱编程的大叔 | 园豆:29788 (高人七级) | 2015-08-14 10:20

@爱编程的大叔: 

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里获取来的,我是想根据登录人所属几班的就让他显示出这个班级的数据来

玩世不恭的雷寅 | 园豆:38 (初学一级) | 2015-08-14 10:27

@玩世不恭的雷寅: 说了要么视图,要么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里面。

爱编程的大叔 | 园豆:29788 (高人七级) | 2015-08-14 10:37

@爱编程的大叔: 奥,,,原来如此,,,,感谢大神的帮助

玩世不恭的雷寅 | 园豆:38 (初学一级) | 2015-08-14 11:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册