2013-03-07 2 views
-4

Я создаю игру, и мой макет таблицы выглядит следующим образом:Как я могу с помощью LiNQ выбрать элементы из списка на основе другого списка?

dbPlayer: 
Id (int) 
... 

dbGame: 
Id (int) 
Finished (bool) 
... 

dbGamePlayer: 
GameId 
PlayerId 
... 

Учитывая игроков ID, как я могу выбрать все игры, которые игрок участвует в, но не (правда) закончил?

Это то, что я так далеко:

from g in dbGame 
join gp in dbGamePlayer on gp.GameId equals g.Id 
join p in dbPlayer on p.Id equals gp.PlayerId 
where p.Id == 1 && g.Finished == false 
select g 

Но я получаю ошибки повсюду. Извините, я новичок в LINQ

+1

Можете ли вы привести примеры кода? то есть, что вы выбираете, откуда? –

+0

A: «Вы просто выбираете все игры, в которые игрок участвует, но не закончен». Если вам нужна дополнительная помощь, вы должны показать нам, что вы сделали до сих пор и что не работает. –

+0

Добавил мой код sofar. – Jason94

ответ

0

Ваше заявление LINQ неверно.

Соединительный элемент object (gp) должен находиться в правой части равенства.

join gp in dbGamePlayer on g.Id equals gp.GameId 

То же самое относится и ко второму присоединиться:

join p in dbPlayer on gp.PlayerId equals p.Id 

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

IEnumerable query = (from g in dbGame 
join gp in dbGamePlayer on g.Id equals gp.GameId 
join p in dbPlayer on gp.PlayerId equals p.Id 
where p.Id == 1 && g.Finished == false 
select g); 

Но ошибка

Название модели не в область с левой стороны равна. Рассмотрите возможность замены выражения по обе стороны от равных.

должно было вам это сказать.

Смежные вопросы