代码之家  ›  专栏  ›  技术社区  ›  Abe Miessler

使用LINQ选择分层数据?

  •  3
  • Abe Miessler  · 技术社区  · 14 年前

    我在SQL Server中有一个表的结构如下:

    id  Name  Parent
    --  ----  ------
    1   foo   null
    2   bar   1
    3   oof   null
    4   rab   3
    .
    .
    .
    

    我需要从两个相关联的行中获取数据,作为.NET数据表中的一行。我想要的数据表如下:

    Parent  Child
    ------  -----
    foo     bar
    oof     rab
    

    我可以使用下面的查询来完成此操作:

    with temp as
    (
      SELECT 1 id,'foo' name, null parent
      UNION
      select 2,'bar', 1
      UNION
      SELECT 3,'oof', null
      UNION
      select 4,'rab', 3
    )
    
    SELECT t1.name parent, t2.name child
    FROM temp t1
    INNER JOIN temp t2
    ON t1.id = t2.parent
    

    但我很好奇是否有一种简单的方法可以使用LINQ来实现这一点?(我们的商店使用LINQ访问大多数数据库)

    4 回复  |  直到 14 年前
        1
  •  1
  •   Dustin Laine    14 年前
    DataTable dt = new DataTable()
    //Other DT stufff
    
    //LINQ Query
    var data = from t in table
               select t;
    
    //Loop to create DT
    foreach (item in data.ToList())
    {
        DataRow dr = new DataRow();
        dr["Parent"] = item.Name;
        dr["Child"] = item.item.Name; //Where item.item is your FK relation to itself
        dt.Rows.Add(dr);
    }
    
        2
  •  2
  •   Doggett    14 年前

    var result = from t1 in table
    join t2 in table on t1.id = t2.parent
    select new { parent = t1.name, child = t2.name }
    
        3
  •  0
  •   Jake Kalstad    14 年前
    data.Select(d => d.Parent).Select(p => p.Property).ToList();
    

        4
  •  0
  •   jasper johnz    14 年前
    var result = source.Select(child => new { 
     Child = child, 
     Parent = source.SingleOrDefault(parent => parent.ID == child.Parent)
    });