首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ Lamba连接,带计数

问LINQ Lamba连接,带计数
EN

Stack Overflow用户
提问于 2018-05-11 21:28:23
回答 4查看 84关注 0票数 2

我想要得到没有当前团队的所有团队,以及有4个或更多玩家的所有团队。我尝试编写这个linq lambda查询:

代码语言:javascript
复制
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();

但我不能指望在什么情况下有多少球员有球队。怎么办?对于info,SQL中的查询是什么?感谢您的帮助!

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

​

EN

回答 4

Stack Overflow用户

发布于 2018-05-11 21:49:19

基于以上类,您可以扩展Team类并添加Players导航属性。

添加导航属性时,请确保球队和球员表之间的数据库关系已就绪。此外,如果需要,请配置您的DbContext。

代码语言:javascript
复制
public class Team
{
    //...other properties
    public virtual ICollection<Player> Players { get; set; }
}

当您添加导航属性时,实现您的需求将是微不足道的:

代码语言:javascript
复制
connection.Teams
          .Where(t => t.ID != team.ID && t.IsVisible == true && !t.DeleteDate.HasValue && t.Players.Count() >= 4)
票数 3
EN

Stack Overflow用户

发布于 2018-05-11 21:59:15

尝试GroupBy():

代码语言:javascript
复制
var teams = (from tp in connection.Team
   join p in connection.Team on tp.Player.IDTeam equals p.Team.ID
   select new { Team = tp, Player = p })
   .Where(tp =>  tp.Team.IsVisible == true && !tp.Team.DeleteDate.HasValue)
   .GroupBy(x => x.Team.ID)
   .Where(x => x.Count >= 4)
   .ToList();
票数 0
EN

Stack Overflow用户

发布于 2018-05-11 22:08:34

试试这个:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50293415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档