Хобрук: Ваш путь к мастерству в программировании

использование linq для получения одной записи из таблицы, связанной с другой таблицей

Вопрос сбивает с толку, так как я действительно не знал, как его задать.

Во всяком случае, у меня есть 4 таблицы, и мне нужно добраться до таблицы TokenSetting, чтобы получить одну запись. Мне дали код компании, и я должен отправиться оттуда и получить остальную информацию, которая мне нужна. И поскольку у каждой корпорации есть несколько корпоративных структур, я должен сначала получить корпоративную структуру, чтобы получить назначенные ей токены.

Вот макет:

введите здесь описание изображения

Это мой код:

  _currentcorp = (from c in _entities.Corporations
              where c.CompanyCode == textBox_CompanyCode.Text
              select c).FirstOrDefault();

  if (_currentcorp == null)
  {
    errorProvider1.SetError(textBox_CompanyCode, "Invalid corporation.");
    return;
  }

  var corpstructure = (from cs in _currentcorp.CorporationStructures
                          where cs.District == null &&
                                cs.Branch == null &&
                                cs.Region == null
                          select cs).FirstOrDefault();

  if (corpstructure == null)
  {
    errorProvider1.SetError(textBox_CompanyCode, "Invalid corporation structure.");
    return;
  }

  var tokensetting = (from ts in _currentcorp.Tokens
                      where ts.CorporationStructureId == corpstructure.CorporationStructureId                           
                      select ts.TokenSettings).FirstOrDefault();

tokensetting возвращается как ienumerable, хотя я говорю, что он должен получить firstordefault. Я предполагаю, что это говорит о том, чтобы получить firstordefault для токенов?

В любом случае, в таблице настроек токенов должна быть только 1 запись, даже если таблица 1 ко многим. Как вернуть firstordefault только для этой таблицы?

==== ОТВЕТ ====

Как было предложено, я сделал следующее:

  var tokensetting = (from ts in _currentcorp.Tokens
                      where ts.CorporationStructureId == corpstructure.CorporationStructureId                           
                      select ts.TokenSettings.FirstOrDefault()).FirstOrDefault();
26.03.2013

  • Вы пытались зарегистрировать выполненные операторы SQL, а затем выполнить их вручную? Действительно ли существует только 1 строка настроек токена для заданных критериев? 27.03.2013
  • да, хотя моя проблема в том, что настройка токена оценивается как бесчисленная. Это означает, что я возвращаю желаемые результаты не одной записи, а коллекции. 27.03.2013
  • В конце концов, TokenSettings — это множественное число ;) Возможно, вы захотите изменить структуру таблицы и создать отношение 1:1 между таблицами Token и TokenSetting. 27.03.2013

Ответы:


1

Я считаю, что запрос LINQ возвращает IEnumerable из IEnumerables, поэтому второй .FirstOrDefault() должен дать вам то, что вы хотите.

Первый вызов указывает, что вам нужна первая строка в результате запроса LINQ, а второй указывает, что вам нужен первый элемент ts.TokenSettings, который сам является коллекцией.

26.03.2013
  • да, достаточно просто, я пытался надеть его раньше, но снаружи (), на этот раз я поместил их внутрь, и это сработало! Тывм! 27.03.2013
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..