Сложные запросы LINQ (несколько соединений) - PullRequest
0 голосов
/ 03 мая 2018

Я довольно новичок в 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. Во-первых, я получаю идентификатор пользователя.
  2. Я получаю идентификатор клиента, связанный с этим идентификатором пользователя.
  3. Затем я присоединяю объект userGroups к таблице SurveyGroup.
  4. Наконец, я присоединяюсь к groupedSurveys с таблицей Surveys.

Любое руководство будет с благодарностью!

ОБНОВЛЕНО:

Я получаю следующую ошибку:

Элемент модели, передаваемый в словарь, имеет тип '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 голосов
/ 03 мая 2018

В этой строке:

select new { t22.ClientID, t22.Name}

... вы создаете новый экземпляр анонимного типа на основе данных в t22 (это запись опроса).

Однако список, который необходимо предоставить вашему представлению, должен быть списком экземпляров Survey, а не списком экземпляров анонимного типа.

Так что измените его на

select t22

и ты в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...