日期:2014-05-18  浏览次数:20856 次

請教C#Linq查詢DataTable的問題
再次請教各位有關Linq操作C#DataTable的問題,這次我要用Linq操作兩個DataTable作子查詢,兩個簡單的DataTable表如下:
A:(表A數據來源:select * from 菜單)
識別碼 菜單名稱
1 會員管理
2 新增會員
3 刪除會員
4 卡操作 
5 充錢
6 改卡密碼
.
.
.

B:(表B的數據來源:select * from 菜單關聯)
父菜單ID 子菜單ID
1 2
1 3
4 5
4 6
.
.
.
要用Linq實現以下這句sql的功能:select 識別碼,菜單名稱, from 菜單 where 識別碼 in(select 子菜單ID from 菜單關聯 where 父菜單ID='1')
注:是用linq操作以上的兩個DataTable,而不是用linq操作Sql數據庫哦。


------解决方案--------------------
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
------解决方案--------------------
C# code

var dtResult = from c in dtMenuAll.AsEnumerable()
  where
  (
  from d in dtRelationalMenuAll.AsEnumerable()
  where (d.Field<int>("父菜單ID") == Convert.ToInt64(1))
  select d.Field<int>("子菜单ID")
  ).Contains(c.Field<int>("識別碼"))