【发布时间】:2013-06-18 07:34:21
【问题描述】:
我正在尝试为一个游戏创建一个 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};
我现在知道我无法在 join equals 的右侧使用 pl,也无法在左侧使用 pos,有没有办法使用 linq 执行这个特定的连接?
【问题讨论】:
-
抱歉,刚刚编辑,应该是
pl.MainPositionID != pos.PositionID -
我相信您正在寻找左外连接。查看此堆栈:stackoverflow.com/questions/5434313/left-outer-join-in-linq
-
这个链接很好地解释了连接,应该说明为什么左外连接可以满足您的需求codinghorror.com/blog/2007/10/…
-
只是一个简短的评论。在游戏中使用 Linq 可能不是一个好主意。虽然编程模型非常好,在某些情况下甚至可以提供性能提升,但在游戏中你可能经常看到相反的情况。运行 Linq 查询将创建许多临时对象,这可能会导致垃圾收集,这些可能会再次导致您的游戏“卡顿”。所以你至少应该避免在你的游戏循环中使用 Linq。
-
@RuneGrimstad 你会建议什么?我们只能假设 LINQ 解释尽可能精简。
标签: c# linq linq-to-entities