用Linq操作兩個DataTable作子查詢,兩個簡單的DataTable表如下:
菜单:
识别码 菜单名称
1-------会员管理
2-------新增会员
3-------删除会员
4-------卡操作
5-------卡充錢
6-------卡改密碼
.
.
.菜单关联:
父菜单ID 子菜单ID
1---------2
1---------3
4---------5
4---------6
.
.
.
这是一个做多级菜单关联的两张表,我要查找出父菜单ID等于1下的所包含的子菜单ID的菜单名称,也就是要在Linq下实现以下在sqlserver里的子查询功能:select 識別碼,菜單名稱, from 菜單 where 識別碼 in(select 子菜單ID from 菜單關聯 where 父菜單ID='1')
菜单:
识别码 菜单名称
1-------会员管理
2-------新增会员
3-------删除会员
4-------卡操作
5-------卡充錢
6-------卡改密碼
.
.
.菜单关联:
父菜单ID 子菜单ID
1---------2
1---------3
4---------5
4---------6
.
.
.
这是一个做多级菜单关联的两张表,我要查找出父菜单ID等于1下的所包含的子菜单ID的菜单名称,也就是要在Linq下实现以下在sqlserver里的子查询功能:select 識別碼,菜單名稱, from 菜單 where 識別碼 in(select 子菜單ID from 菜單關聯 where 父菜單ID='1')
var query=from t1 in dt1.AsEnumerable() //菜单表
let temp=dt2.AsEnumerable().Where(t2=>t2.Field<int>("父菜单ID")==1).Select(t2=>t2.Field<int>("子菜单ID"))
where temp.Contains(t1)
select t1;如果你想实现无限弟归,查找 父菜单ID==1的所有子菜单也是可以
可参考:
http://topic.csdn.net/u/20120628/17/cedc4661-39b6-42c9-9ba1-a1d8e3244142.html
let temp=dt2.AsEnumerable().Where(t2=>t2.Field<int>("父菜单ID")==1).Select(t2=>t2.Field<int>("子菜单ID"))
where temp.Contains(t1.Field<int>("識別碼"))
select t1;