C# 带计数的LINQ-Lamba连接
我想得到所有没有当前球队的球队,以及所有有4名或更多球员的球队。 我尝试编写以下linq lambda查询: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
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();