Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带计数的LINQ-Lamba连接_C#_.net_Linq - Fatal编程技术网

C# 带计数的LINQ-Lamba连接

C# 带计数的LINQ-Lamba连接,c#,.net,linq,C#,.net,Linq,我想得到所有没有当前球队的球队,以及所有有4名或更多球员的球队。 我尝试编写以下linq lambda查询: teams = connection.Team .Join(connection.Player, t => t.ID, p => p.IDTeam, (t, p) => new { Team = t, Player = p }) .Where(tp => tp.Player.IDTeam == tp

我想得到所有没有当前球队的球队,以及所有有4名或更多球员的球队。 我尝试编写以下linq lambda查询:

teams = connection.Team 
    .Join(connection.Player,
        t => t.ID,
        p => p.IDTeam,
        (t, p) => new { Team = t, Player = p })
    .Where(tp => tp.Player.IDTeam == tp.Team.ID
        && tp.Team.ID != team.ID
        && tp.Team.IsVisible == true
        && !tp.Team.DeleteDate.HasValue)
    .Select(tp => tp.Team)
    .ToList();
但我不能指望在什么情况下有多少球员参加比赛。如何做?对于信息,这是SQL中的查询? 谢谢你的帮助

编辑: 根据需要,类(从DBFirst生成):

基于上述类,您可以扩展
团队
类并添加
玩家
导航属性

添加导航属性时,请确保团队和玩家表之间存在数据库关系。此外,如果需要,请配置
DbContext

public class Team
{
    //...other properties
    public virtual ICollection<Player> Players { get; set; }
}
尝试一个GroupBy():

试试这个:

teams = connection.Team 
.Join(connection.Player,
    t => t.ID,
    p => p.IDTeam,
    (t, p) => new { Team = t, Player = p })
.Where(tp => tp.Player.IDTeam == tp.Team.ID
    && tp.Team.ID != team.ID
    && tp.Team.IsVisible == true
    && !tp.Team.DeleteDate.HasValue)
.Select(tp => tp.Team)
.ToList().GroupBy(i=>i.ID).Where(i=>i.Count()>=4);
这个怎么样

var teams = 
           (from t in connection.Team
           join p in connection.Player on p.TeamId equals t.ID into playersInTeam
           select new 
           { 
                Team = t, 
                PlayersCount = playersInTeam.Count(x => x.TeamId == t.Id) 
           })
           .Where(x => x.PlayersCount >= 4)
           .ToList();

DarjanBogdan补充道:“你没有导航属性吗?你能提供玩家和团队等级吗?”。没有Tim,任何导航属性Thanks@MicheleBoscagin:我很确定
Player.IdTeam
Team.Id
上没有外键。修复此问题,实体框架将添加此导航属性。我想没有外键,这就是实体框架没有自动创建的原因。@TimSchmelter是的,可能就是这样
teams = connection.Team 
.Join(connection.Player,
    t => t.ID,
    p => p.IDTeam,
    (t, p) => new { Team = t, Player = p })
.Where(tp => tp.Player.IDTeam == tp.Team.ID
    && tp.Team.ID != team.ID
    && tp.Team.IsVisible == true
    && !tp.Team.DeleteDate.HasValue)
.Select(tp => tp.Team)
.ToList().GroupBy(i=>i.ID).Where(i=>i.Count()>=4);
var teams = 
           (from t in connection.Team
           join p in connection.Player on p.TeamId equals t.ID into playersInTeam
           select new 
           { 
                Team = t, 
                PlayersCount = playersInTeam.Count(x => x.TeamId == t.Id) 
           })
           .Where(x => x.PlayersCount >= 4)
           .ToList();