C# 如何基于特定值MVC ASP.NET Core查询数据库中的列

C# 如何基于特定值MVC ASP.NET Core查询数据库中的列,c#,sql,asp.net,asp.net-mvc,model-view-controller,C#,Sql,Asp.net,Asp.net Mvc,Model View Controller,这可能是一个明显的答案,我想得太多了,但我需要帮助从共享属性的数据库中检索值 我的数据库: 此特定菜单项数据库包含菜单项和指向我的餐厅数据库的链接。有一个RestaurantID列,表示该项目所属的餐厅。 非常简单,但仅举个例子:ID为1的鸡块属于ID为1的餐厅 我需要执行一个查询,检索共享同一餐馆的菜单项列表。例如:因为我正在查询RESTuarAnti==1的项目,所以它将从数据库中检索9个项目。在下面的函数中,我很难挑出通用值: public async Task<IAction

这可能是一个明显的答案,我想得太多了,但我需要帮助从共享属性的数据库中检索值

我的数据库:

此特定菜单项数据库包含菜单项和指向我的餐厅数据库的链接。有一个RestaurantID列,表示该项目所属的餐厅。 非常简单,但仅举个例子:ID为1的鸡块属于ID为1的餐厅

我需要执行一个查询,检索共享同一餐馆的菜单项列表。例如:因为我正在查询RESTuarAnti==1的项目,所以它将从数据库中检索9个项目。在下面的函数中,我很难挑出通用值:

  public async Task<IActionResult> GetRestaurantOneVals()
        {
            int id = 1;              //Restuarant one's ID is == 1

            var menuItem = await _context.MenuItems
                .Include(s => s.Restaurant)
                .AsNoTracking()
                .FirstOrDefaultAsync(nameof => nameof.Restaurant.ID == id);
            
            var restaurantList = menuItem;
            
            return View(menuItem);
        }

您使用的是
FirstOrDefaultAsync()
,它将检索与给定参数匹配的第一个元素,但您希望返回与参数匹配的完整列表。更改:

var menuItem = await _context.MenuItems
             .Include(s => s.Restaurant)
             .AsNoTracking()
             .FirstOrDefaultAsync(nameof => nameof.Restaurant.ID == id);
在您的
getRestaurantoEvals()
方法中:

var menuItems = await _context.MenuItems
              .Include(s => s.Restaurant)
              .AsNoTracking()
              .Where(x => x.Restaurant.Id == id)
              .ToListAsync();
.Where()
将获取与给定语句匹配的所有对象,
ToList()
将从查询中创建一个
列表


然后简单地
返回视图(menuItems)

FirstOrDefaultAsync做什么?是否有其他方法可以为您提供条目列表?@mjwills FirstOrDefauktAsync返回序列的第一个元素,如果序列没有元素,则返回默认值。我想我可能是试图查询错误,我的方法似乎过于复杂。正如你所知,
RestaurantId
列被称为
外键,如果你感兴趣的话。太棒了,非常感谢你!很高兴帮助你。
var menuItem = await _context.MenuItems
             .Include(s => s.Restaurant)
             .AsNoTracking()
             .FirstOrDefaultAsync(nameof => nameof.Restaurant.ID == id);
var menuItems = await _context.MenuItems
              .Include(s => s.Restaurant)
              .AsNoTracking()
              .Where(x => x.Restaurant.Id == id)
              .ToListAsync();