我有一个名为Game
的表,它为玩家ID提供了4列。我还有一张名为Player
的表格。当我尝试计算玩家所在的所有游戏时,我只从Game
表中的第一列获得玩家。
player.Games.Count();
我为所有表设置了外键,并且它在表设计器中正确显示。从下面的图片中,您可以看到它应该从blue1 + 2和red1 + 2计算,但它只从Blue1
计算...
我还试图创建一种手动选择所有游戏的方法:
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.
答案 0 :(得分:1)
如果您设置了四种关系,则每种关系都会有不同的名称,最有可能是Games
,Games1
,Games2
和Games3
。通过执行player.Games.Count()
您只计算与第一个关系相关的游戏,您需要为其他关系相关的游戏添加额外的计数:
var allGameCounts = player.Games.Count() + player.Games1.Count() + player.Games2.Count() + player.Games3.Count();
答案 1 :(得分:0)
我实际上最终使用了上面的方法,但首先将其转换为列表:
return from player in db.Players.ToList()
where GetPlayerGames(player.ID) > 0
select player;
答案 2 :(得分:0)
如果你想在不加载整个数据库的情况下在sql中进行过滤,你可以这样做......
from player in db.Players
where player.Games.Any()
|| player.Games1.Any()
|| player.Games2.Any()
|| player.Games3.Any()
select player