首页 > 解决方案 > Razorpage 上 LINQ 中的 clausole 不起作用的地方

问题描述

我正在开发一个 Razor WebApp,当我使用这个 LINQ 代码时,它不能正常工作。这是我的剃刀代码:

var menuItems = menus.GetMenuMaster(@UserRoles).Result.Where(n => n.Parent_MenuID == "*");    

@foreach (var menuNames in menuItems)
{
   var submenus = menuItems.Where(n => n.Parent_MenuID == menuNames.MenuID))
}

数据库包含以下数据:

   ID   | MenuID    | MENUNAME  | Parent_MenuID
---------------------------------------------------
    1   | HOME      | HOME      | *
    2   | MOVIES    | MOVIES    | *
    3   | ACTORS    | ACTORS    | MOVIES

问题是 HOME 菜单的“子菜单”是空的,但必须有 ACTORS 子菜单;“menuItems”包含所有树形菜单项。

标签: c#linqrazor-pages

解决方案


改写如下:

var allmenus = menus.GetMenuMaster(@UserRoles).Result;
var menuItems = allmenus.Where(n => n.Parent_MenuID == "*");    

@foreach (var menuNames in menuItems)
{
   var submenus = allmenus.Where(n => n.Parent_MenuID == menuNames.MenuID))
}

更新:

在您的代码中,您按条件过滤了菜单n.Parent_MenuID == "*",然后在循环中您尝试按条件在过滤后的集合中查找项目n.Parent_MenuID == menuNames.MenuID。但是您的收藏(在第一次过滤后)还没有这样的项目。


推荐阅读