C#Linq加入不平等

时间:2013-06-18 07:34:22

标签: c# linq linq-to-entities

我正在尝试为游戏创建一个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执行此特定连接?

2 个答案:

答案 0 :(得分: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}));

答案 1 :(得分: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};

选择'equals'的限制以确保在连接中仅使用相等性。这是因为具有更高级逻辑的查询无法可靠地转换为关系语句。

考虑本文档的第2段。 http://msdn.microsoft.com/en-us/library/bb311040.aspx