MVC4 - 用于查询多个关联表的Linq Lambda表达式

时间:2015-10-09 15:52:57

标签: c# mysql linq asp.net-mvc-4 lambda

我正在尝试创建级联下拉菜单,并且一直在关注本教程here

我的数据库比教程中的数据库更复杂,我需要帮助创建一个lambda表达式

这是我的数据库表

DB Tables

我要创建的级联下拉菜单将允许用户选择 RiskType然后根据选择将显示所选RiskType的关联GroupMembers。

以下是我在控制器中的代码

public ActionResult AddNewRisk()
        {
            ViewBag.RiskTypeID = new SelectList(_DBContext.RiskTypes, "ID", "Description");
            ViewBag.GroupMembers = new SelectList(new List<GroupMember>(), "ID", "Name");
            return View();
        }


public IList<GroupMember> GetGroupMember(int SelectedRiskTypeID)
        {
            return   _DBContext
                     .RiskTypeHasGroups

        }

        public JsonResult GetJsonGroupMember(int ID)
        {
            var GroupMemberListT = this.GetGroupMember(Convert.ToInt32(ID));
            var GroupMemberList = GroupMemberListT.Select(x => new SelectListItem()
                                   {
                                       Text = x.Name,
                                       Value = x.ID.ToString()
                                   });
            return Json(GroupMemberList, JsonRequestBehavior.AllowGet);

        }

在名为GetGroupMember的方法中遇到问题并且不知道如何编写正确的lambda表达式以便仅回退具有匹配的RiskGroup.ID后跟匹配的RiskType.ID的组成员。如果有人能告诉我正确的方法,我真的很感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

根据我的建议简化模型后,您的查询将变为:

public IQueryable<GroupMember> GetGroupMember(int SelectedRiskTypeID)
{
  return _DBContext.GroupMembers
    .Where(g=>g.RiskGroups.Any(rg=>rg.ID=SelectedRiskTypeID));
}

如果您决定保留ID,那么这将是您的查询:

public IQueryable<GroupMember> GetGroupMember(int SelectedRiskTypeID)
{
  return _DBContext.GroupMembers
    .Where(gm=>gm.RiskGroupHasGroupTypes
      .Any(rghgt=>rghg‌​t.RiskGroup.ID==SelectedRiskGroupTypeID))
}