如何在c#mvc5中遍历数据库表?

时间:2017-04-24 10:39:13

标签: c# linq asp.net-mvc-5

您好我正在使用linq,api,ef开发一个应用程序。我坚持一点,我有一些棘手的要求。我必须遍历表格。下面是我的数据库表。

  ID  PID PrID LID  Visibility
    80  50  0   1   VISIBLE
    81  50  0   1   HIDDEN
    82  50  81  2   HIDDEN
    84  50  82  3   HIDDEN
    85  50  82  3   VISIBLE
    89  50  82  3   VISIBLE
    92  50  82  3   VISIBLE
    93  50  81  2   VISIBLE
    118 50  82  3   VISIBLE
    125 50  82  3   VISIBLE
   2237 50  82  3   VISIBLE
   2238 50  82  3   VISIBLE
   2241 50  80  2   VISIBLE
   2242 50  80  2   HIDDEN
  2243 50  2241 3   VISIBLE
  2244 50  2241 3   HIDDEN
  2245 50  2242 3   VISIBLE

在上表中,当PrID为0时意味着它不会有任何父母。当前行本身是父级。 每当我通过上表的每一行进行评估时。我想查看天气,其父母的可见性是可见的或隐藏的。 例如, 当我遍历第3行时,PrID是81.再次81的PrID是0所以隐藏 当我遍历第4行时,PrID是82.再次82的PID是81,而81的父亲是0是隐藏的等等。

当我遍历第5行时,PrID为82。再次82的PID是81,而81的父亲是0是隐藏的等等。

当我迭代第8行时,PrID是81.再次81的PrID是0所以隐藏

最后,我应该有一个只有可见行的列表。

 public HttpResponseMessage Get(int projectsId)
{
  List<NCT_Process> abc = new List<NCT_Process>();
                    abc = (from c in entityObject.NCT_Process where c.projectId == projectsId select c).ToList();
                    var visibles = abc.Where(x => IsVisible(x)).ToList();
//other code
}

 public static bool IsVisible(NCT_Process tableItem)
        {
            if (tableItem.parentId == 0)
                return tableItem.visibility;
            else
            {
                var parent = table.FirstOrDefault(x => x.ID == tableItem.parentId);
                return IsVisible(parent);
            }
        }

我可以去一级检查PrID是否可见。例如,在第5行PrID是82.再次82的PID是81,而81的父亲是0。 我们需要检查3个级别。我可以得到一些帮助来获得逻辑吗?我想努力获得逻辑。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

这个怎么样

   public testTable getParent(testTable item){
        var parent=item;
        while(true){
        if(parent.PrID ==0)
        break;
        parent=dbo.testTables.SingleOrDefault(i => i.Id==parent.PrID)
        }
        return parent;
    }
    yourList.ToList().Select(item =>new{
        isParentVisible=getParent(item).Visibility

    })

答案 1 :(得分:1)

递归函数可能适用于这种情况..

    public static bool IsVisible(TableItem tableItem)
    {
        if (tableItem.PrID == 0)
            return tableItem.Visibility;
        else
        {
            var parent = table.FirstOrDefault(x => x.ID == tableItem.PrID);
            return IsVisible(parent);
        }

    }

    static List<TableItem> table = new List<TableItem>();
    var visibles = table.Where(x => IsVisible(x)).ToList();

更新将第二个参数表作为Enumarable

       public static string IsVisible(TableItem tableItem, IEnumerable<TableItem> table)
    {
        if (tableItem.PrID == 0 || tableItem.Visibility.Equals("HIDDEN"))
            return tableItem.Visibility;
        else
        {
            var parent = table.FirstOrDefault(x => x.ID == tableItem.PrID);
            return IsVisible(parent, table);
        }

    }

   var visibles = table.Where(x => IsVisible(x, 
               table.AsEnumerable()).Equals("VISIBLE")).ToList();