【问题标题】:Return hierarchy from sql in lists in c# using linq使用linq从c#中列表中的sql返回层次结构
【发布时间】:2013-10-02 23:32:25
【问题描述】:

我在 sql 中有一个表,它有三列(ID、Name、ParentID),每列都有很多记录。现在我想要的是从 ParrentId 中获取所有层次结构,将其包含在三个视图中。

这可以通过一些不错的 LINQ 解决方案来解决吗?

我之前尝试的是使用一组 List-s,其中一个是子级,但出现问题是因为某些子级列表下还可以有更多子级。

我需要 linq 代码:

    List<Menu> hList = new List<Menu>();

var m1 = new Menu();

var m2 = new Menu();
var m3 = new Menu();

hList.AddRange(new List<Menu>() { m1, m2, m3});

当然,在实际示例中,它不会只是 3 个子 var-s。

感谢任何帮助和建议!

【问题讨论】:

  • +1 只是掷骰子,但AssociateWith 不能实现这样的目标吗?您是否正在寻找 T-Sql 的 WITHUNION 组合的 linq 等效项?
  • 您是否使用 linq-to-sql 或 linq-to-entities 映射数据库中的这些数据?如果是这样,您是否可以不只是修改您的表,以便您有一个自引用的外键引用 ParentID->ID...当您从数据库中检索时,它将自动将您的对象映射到所需的层次结构中。

标签: c# linq list hierarchy


【解决方案1】:
public void FillMenu(EntityCollection menuList, List<Menu> hList, int? parentMenuId)
    {
        var g = from m in menuList
                where ((MenuEntity)m).ParentMenuId == parentMenuId
                select (MenuEntity)m;

        foreach (MenuEntity menu in g)
        {
            var newMenu = new Menu();
            newMenu.Id = menu.Id;
            newMenu.Name = menu.Name;

            newMenu.ChildMenu = new List<Menu>();

            FillMenu(menuList, newMenu.ChildMenu, newMenu.Id);

            hList.Add(newMenu);
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多