linq to sql не считая все столбцы - PullRequest
0 голосов
/ 02 сентября 2010

У меня есть таблица с именем Game, которая содержит 4 столбца для идентификаторов игроков. И у меня также есть таблица под названием Player. Когда я пытаюсь сосчитать все игры, в которых играл игрок, я получаю игроков только из первого столбца таблицы Game.

player.Games.Count();

Я установил внешние ключи для всех таблиц, и они правильно отображаются в конструкторе таблиц. На изображении ниже вы можете видеть, что он должен считаться с blue1 + 2 и red1 + 2, но он считается только с Blue1 ...

alt text

Я также пытался создать метод, чтобы вручную выбрать все игры:

public int GetPlayerGames(int playerID)
{
    return (from game in db.Games
            where game.Blue1 == playerID
            || game.Blue2 == playerID
            || game.Red1 == playerID
            || game.Red2 == playerID
            select game).Count();
}

Но когда я использую его внутри запроса linq

return from player in db.Players
       where GetPlayerGames(player.ID) > 0
       select player;

Я получаю эту ошибку:
Method 'Int32 GetPlayerGames(Int32)' has no supported translation to SQL.

Ответы [ 3 ]

1 голос
/ 02 сентября 2010

Если вы установили четыре отношения, у каждого из них будет свое имя, скорее всего, Games, Games1, Games2 и Games3. Делая player.Games.Count(), вы подсчитываете только игры, связанные с первыми отношениями, вам нужно добавить дополнительные подсчеты для игр, связанных с другими отношениями:

var allGameCounts = player.Games.Count() + player.Games1.Count() + player.Games2.Count() + player.Games3.Count();
0 голосов
/ 02 сентября 2010

Если вы хотите выполнить фильтрацию в SQL без загрузки всей базы данных, вы можете сделать это ...

from player in db.Players
where player.Games.Any()
  || player.Games1.Any()
  || player.Games2.Any()
  || player.Games3.Any()
select player
0 голосов
/ 02 сентября 2010

Я фактически закончил тем, что использовал метод, описанный выше, но сначала просто преобразовал его в список:

return from player in db.Players.ToList()
       where GetPlayerGames(player.ID) > 0
       select player;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...