linq to sql不计算所有列

时间:2010-09-02 10:50:37

标签: linq-to-sql

我有一个名为Game的表,它为玩家ID提供了4列。我还有一张名为Player的表格。当我尝试计算玩家所在的所有游戏时,我只从Game表中的第一列获得玩家。

player.Games.Count();

我为所有表设置了外键,并且它在表设计器中正确显示。从下面的图片中,您可以看到它应该从blue1 + 2和red1 + 2计算,但它只从Blue1计算...

alt text

我还试图创建一种手动选择所有游戏的方法:

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.

3 个答案:

答案 0 :(得分:1)

如果您设置了四种关系,则每种关系都会有不同的名称,最有可能是GamesGames1Games2Games3。通过执行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