原文:http://blog.youkuaiyun.com/q107770540/article/details/7708418
- --构造测试数据: 只作演示用
- CREATE TABLE [dbo].[Tim_LinqTable](
- [Id] int PRIMARY KEY IDENTITY(1,1) NOT NULL,
- [Name] [varchar](50) NOT NULL,
- [Parent] int NOT NULL,
- )
- GO
- INSERT INTO [Tim_LinqTable]
- SELECT 'A',0 UNION ALL
- SELECT 'A1',1 UNION ALL
- SELECT 'A2',1 UNION ALL
- SELECT 'B1',2 UNION ALL
- SELECT 'B2',3 UNION ALL
- SELECT 'C1',4 UNION ALL
- SELECT 'C2',4 UNION ALL
- SELECT 'D1',5 UNION ALL
- SELECT 'D2',5 UNION ALL
- SELECT 'D3',5
- GO
- WITH temp
- AS
- (
- SELECT * FROM [Tim_LinqTable] WHERE Parent = 3
- UNION ALL
- SELECT m.* FROM [Tim_LinqTable] AS m
- INNER JOIN temp AS child ON m.Parent = child.Id
- )
- SELECT * FROM temp
- GO
- --查询 Parent=3 的所有子数据结果如下:
- Id Name Parent
- ----------- -------------------------------------------------- -----------
- 5 B2 3
- 8 D1 5
- 9 D2 5
- 10 D3 5
- (4 row(s) affected)
- //好,下边来看看用C#怎么实现上边的SQL语句吧:
- void Main()
- {
- var query=GetSonID(3);
- Console.WriteLine("Id\tName\tParent");
- query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}",q.Id,q.Name,q.Parent));
- /*
- Id Name Parent
- 5 B2 3
- 8 D1 5
- 9 D2 5
- 10 D3 5
- */
- }
- public IEnumerable<Tim_LinqTable> GetSonID(int p_id)
- {
- var query = from c in this.Tim_LinqTables
- where c.Parent == p_id
- select c;
- return query.ToList().Concat(query.ToList().SelectMany(t => GetSonID(t.Id)));
- }
更多LINQ知识分享,请参考:
http://blog.youkuaiyun.com/q107770540