using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
List<data> ldt = new List<data>();
public Form1()
{
InitializeComponent();
}
private IEnumerable<data> vv(List<data> ldtIn,IEnumerable<data> ien)
{
var v2 = ldtIn.Where(rec => rec.pid == 0).Select(rec => new data(rec.pid, rec.id, rec.falg, 0));
var v1 = ldtIn.Join(ien, l=>l.pid, i=>i.id, (l,i)=>(new data(l.pid,l.id,l.falg,i.level+1)));
var v3 = v2.Union(v1);
if (v3.Count() == ien.Count())
return v3;
return vv(ldtIn, v3).Where(rec=>rec.level==2);
}
private IEnumerable<data> bb(List<data> ldtIn, IEnumerable<data> all, IEnumerable<data> last)
{
var v1 = ldtIn.Join(last, l => l.pid, i => i.id, (l, i) => (new data(l.pid, l.id, l.falg, i.level + 1)));
if (v1.Count() == 0)
{
return all;
}
all = all.Union(v1);
last = v1;
return bb(ldtIn, all, last);
}
private void button1_Click(object sender, EventArgs e)
{
ldt.Add(new data(0, 1, 1));
ldt.Add(new data(1, 2, 2));
ldt.Add(new data(2, 3, 3));
ldt.Add(new data(2, 4, 4));
ldt.Add(new data(3, 5, 5));
ldt.Add(new data(0, 6, 6));
ldt.Add(new data(6, 7, 7));
ldt.Add(new data(7, 8, 8));
ldt.Add(new data(7, 9, 9));
IEnumerable<data> all = ldt.Where(rec => rec.pid == 1).Select(rec => new data(rec.pid, rec.id, rec.falg, 1));
IEnumerable<data> last = all;
dataGridView1.DataSource = null;
dataGridView1.DataSource = bb(ldt, all, last).ToList();
}
}
public class data
{
public data(int pid, int id, int falg)
{
this.pid = pid;
this.id = id;
this.falg = falg;
}
public data(int pid, int id, int falg, int level)
{
this.pid = pid;
this.id = id;
this.falg = falg;
this.level = level;
}
public int pid;
public int id;
public int falg;
public int level;
public int Level
{
get
{
return level;
}
set
{
level = value;
}
}
public int Pid
{
get
{
return pid;
}
set
{
pid = value;
}
}
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
public int Falg
{
get
{
return falg;
}
set
{
falg = value;
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
List<data> ldt = new List<data>();
public Form1()
{
InitializeComponent();
}
private IEnumerable<data> vv(List<data> ldtIn,IEnumerable<data> ien)
{
var v2 = ldtIn.Where(rec => rec.pid == 0).Select(rec => new data(rec.pid, rec.id, rec.falg, 0));
var v1 = ldtIn.Join(ien, l=>l.pid, i=>i.id, (l,i)=>(new data(l.pid,l.id,l.falg,i.level+1)));
var v3 = v2.Union(v1);
if (v3.Count() == ien.Count())
return v3;
return vv(ldtIn, v3).Where(rec=>rec.level==2);
}
private IEnumerable<data> bb(List<data> ldtIn, IEnumerable<data> all, IEnumerable<data> last)
{
var v1 = ldtIn.Join(last, l => l.pid, i => i.id, (l, i) => (new data(l.pid, l.id, l.falg, i.level + 1)));
if (v1.Count() == 0)
{
return all;
}
all = all.Union(v1);
last = v1;
return bb(ldtIn, all, last);
}
private void button1_Click(object sender, EventArgs e)
{
ldt.Add(new data(0, 1, 1));
ldt.Add(new data(1, 2, 2));
ldt.Add(new data(2, 3, 3));
ldt.Add(new data(2, 4, 4));
ldt.Add(new data(3, 5, 5));
ldt.Add(new data(0, 6, 6));
ldt.Add(new data(6, 7, 7));
ldt.Add(new data(7, 8, 8));
ldt.Add(new data(7, 9, 9));
IEnumerable<data> all = ldt.Where(rec => rec.pid == 1).Select(rec => new data(rec.pid, rec.id, rec.falg, 1));
IEnumerable<data> last = all;
dataGridView1.DataSource = null;
dataGridView1.DataSource = bb(ldt, all, last).ToList();
}
}
public class data
{
public data(int pid, int id, int falg)
{
this.pid = pid;
this.id = id;
this.falg = falg;
}
public data(int pid, int id, int falg, int level)
{
this.pid = pid;
this.id = id;
this.falg = falg;
this.level = level;
}
public int pid;
public int id;
public int falg;
public int level;
public int Level
{
get
{
return level;
}
set
{
level = value;
}
}
public int Pid
{
get
{
return pid;
}
set
{
pid = value;
}
}
public int Id
{
get
{
return id;
}
set
{
id = value;
}
}
public int Falg
{
get
{
return falg;
}
set
{
falg = value;
}
}
}
}