复杂的LINQ查询(多个连接)

时间:2018-05-03 19:44:04

标签: asp.net linq join

我对LINQ很新,我在查询时遇到了一些麻烦。我正在尝试获取与特定组关联的调查(SurveyGroups表是分配表)。但是,一旦我将模型返回到View,我就会得到一个null错误。

这是我到目前为止所做的:

public ActionResult Index()
    {
        var userID = User.Identity.GetUserId();
        var clientID = _db.Users.Where(u => u.Id == userID).Select(u => u.ClientID).FirstOrDefault();
        var userGroups = _db.UserGroups.Where(x => x.UserID == userID).ToList();

        var groupedSurveys = (from t1 in userGroups
                              join t2 in _db.SurveyGroups
                    on t1.GroupID equals t2.GroupID
                    select new { t2.SurveyID }).ToList();

        var surveys = (from t11 in groupedSurveys
                       join t22 in _db.Surveys.Where(s => s.ClientID == clientID)
                       on t11.SurveyID equals t22.SurveyID
                       select new { t22.ClientID, t22.Name}).ToList();

        return View("~/Views/User/Dashboard.cshtml", surveys);
    }
  1. 首先,我获得了userID。
  2. 我获得与该用户ID相关联的ClientID。
  3. 然后我将userGroups对象与SurveyGroup表连接。
  4. 最后,我将groupsSurveys加入了Surveys表。
  5. 非常感谢任何指导!

    更新:

    我收到的错误如下:

    传递到字典中的模型项的类型为'System.Collections.Generic.List 1[<>f__AnonymousType6 5 [System.Int32,System.Nullable 1[System.Int32],System.Nullable 1 [System.Int32],System.Nullable 1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [SM_XPRESS.Models.Survey]”。

1 个答案:

答案 0 :(得分:2)

在这一行:

select new { t22.ClientID, t22.Name}

...您正在根据t22(调查记录)中的数据创建匿名类型的新实例。

但是,您需要提供给视图的列表需要是Survey实例列表,而不是匿名类型实例列表。

所以将其改为

select t22

你很高兴。