2013-06-18 2 views
2

Я пытаюсь создать LINQ присоединиться к игре, которая будет выбирать все позиции игрок не играет при помощи следующего запроса:C# Linq Регистрация не равно

var m_player_positions = from pl in tfs.Players 
         join pos in tfs.Positions 
          on new { X = true } equals new { X = (pl.MainPositionID != pos.PositionID) } 
         select new {PlayerName = pl.Forename, Position = pos.Name}; 

я знаю теперь, что я неспособный использовать pl в правой части соединения равно, и не может использовать pos в левой части, есть ли способ выполнить это конкретное соединение с linq?

+0

извините, только что сделал правку, он должен был быть 'pl.MainPositionID = pos.PositionID' – bizzehdee

+0

Я считаю, что вы ищете! левое внешнее соединение. См. Этот стек: http://stackoverflow.com/questions/5434313/left-outer-join-in-linq – Gusdor

+0

Эти ссылки дают очень хорошее объяснение объединений и должны иллюстрировать, почему левое внешнее соединение будет соответствовать вашим потребностям http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – Gusdor

ответ

2

Я был избит, но здесь вы идете.

var m_player_positions = from pl in tfs.Players 
         join pos in tfs.Positions 
          on pl.MainPositionID == pos.PositionID 
         select new {PlayerName = pl.Forename, Position = pos.Name}; 

Ограничения на «равных» были выбраны, чтобы гарантировать, что только равенства используются в joins.This, потому что запросы с более развитой логикой не может перевести надежно в реляционные отчетности.

Рассмотрите второй абзац настоящей документации. http://msdn.microsoft.com/en-us/library/bb311040.aspx

+0

Извините, отредактировав вопрос, должен был быть 'pl.MainPositionID! = Pos.PositionID' – bizzehdee

+4

Не уверен, что мне нравится проголосовать за то, что ворота вернулись. Чувствует себя слишком хорошо, как работа по своему вкусу: D – Gusdor

3

Вы в основном можете сделать это с помощью SelectMany:

var m_player_positions = 
    tfs.Players.SelectMany(
        pl => tfs.Positions 
          .Where(pos => pl.MainPositionID != pos.PositionID) 
          .Select(pos => new {PlayerName = pl.Forename, Position = pos.Name})); 
Смежные вопросы