Многократный запрос соединения в eSql - PullRequest
0 голосов
/ 18 июня 2010

Это мой первый вопрос в stackoverflow, но на самом деле не в первый раз, когда я получаю решение здесь.Я борюсь с множественным объединением в платформе сущностей 4. У меня есть три таблицы (Accounts, Users и AccountUsers), которые трудно запросить.

Я хочу получить всех пользователей для предоставленного идентификатора accountId, включаясоздатель аккаунта.Я могу получить всех пользователей учетной записи без проблем, но для меня труднее найти создателя учетной записи, поскольку он не добавлен в таблицу AccountUsers.ниже приведен быстрый предварительный просмотр взаимосвязи таблиц.

Аккаунты

  • AccountId
  • UserId (создатель аккаунта)
  • ... другие столбцы

Пользователи

  • UserId
  • ... другие столбцы

AccountUsers

  • AccountId
  • UserId

Я бы предпочел, чтобы запрос был esql, но Linq to Entities подойдет.

Я верю вам, ребята, в stackoverflow, поэтому я знаю этоне займет много времени, чтобы получить оценку «Ответ».

Спасибо, что даже читаете.

1 Ответ

0 голосов
/ 18 июня 2010

Если я правильно читаю ваш вопрос, вы ищете не столько объединение, сколько объединение? Я не уверен насчет esql, но я думаю, что следующий запрос Linq должен работать. Может быть, это заставит вас двигаться в правильном направлении (или я могу быть совершенно вне базы или что-то упустить):

var users = (from accountUser in db.AccountUsers
             where accountUser.AccountId == myAccountId
             select accountUser.UserId)
            .ToList()
            .Add((from account in db.Accounts
                  where account.AccountId == myAccountId
                  select account.UserId)
                 .Single());

Чтобы сделать загрузку отложенной, вы всегда можете создать метод, который использует foreach и yield return:

IEnumerable<int> GetAccountUsers(int AccountId)
{
    //return the users
    foreach(var userId in (from accountUser in db.AccountUsers
                           where accountUser.AccountId == myAccountId
                           select accountUser.UserId))
        yield return userId;

    //return the owner too
    yield return (from account in db.Accounts
                  where account.AccountId == myAccountId
                  select account.UserId)
                 .Single();
}

Однако из любопытства, почему владелец также не добавлен в таблицу AccountUsers?

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