【问题标题】:Complex LINQ Queries (Multiple Joins)复杂的 LINQ 查询(多个连接)
【发布时间】:2018-10-14 05:23:06
【问题描述】:

我是 LINQ 的新手,我的查询有点麻烦。我正在尝试获取与特定组关联的调查(SurveyGroups 表是分配表)。但是,一旦我将模型返回到我的视图中,我就会收到一个空错误。

这是我目前所拥有的:

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. 首先,我得到了用户 ID。
  2. 我获得了与该用户 ID 关联的 ClientID。
  3. 然后我将 userGroups 对象加入到 SurveyGroup 表中。
  4. 最后,我将 groupedSurveys 加入到 Surveys 表中。

任何指导将不胜感激!

更新:

我收到的错误如下:

传入字典的模型项的类型为'System.Collections.Generic.List1[<>f__AnonymousType65[System.Int32,System.Nullable1[System.Int32],System.Nullable1[System.Int32],System.Nullable1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1 [SM_XPRESS.Models.Survey]'。

【问题讨论】:

  • 一旦我将模型返回到我的视图中,我得到一个空错误。你能发布导致错误的代码吗?
  • @JohnWu 用错误更新了 OP,我收到了。
  • 再次,您能发布导致错误的代码吗?这几乎总是一个好主意。我们需要查看失败的代码,以便告诉您它有什么问题。
  • @JohnWu 更新了我的 ActionResult 的代码部分,对造成的混乱表示歉意。
  • 提示:你很少需要在 Linq 中使用“join”。

标签: asp.net linq join


【解决方案1】:

在这一行:

select new { t22.ClientID, t22.Name}

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

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

所以改成

select t22

你可以走了。

【讨论】:

  • 太棒了!非常感谢!像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多