Linq选择其中一个子对象属性与值匹配的列表之一

时间:2014-05-01 15:41:24

标签: linq asp.net-mvc-4 subquery

我有以下这些课程

public class Match
{
    public int Id { get; set; }

    public MatchType Type { get; set; }

    public MatchStatus Status { get; set; }

    public LeagueGroup LeagueGroup { get; set; }

    public Tournament Tournament { get; set; }

    public IList<Score> Scores { get; set; }

    public IList<Team> Teams { get; set; }
}

public class Score
{
    public int Id { get; set; }

    public Team Team { get; set; }

    public Nullable<int> Points { get; set; }

    public Match Match { get; set; }
}

public class Team
{
    public int Id { get; set; }

    public IList<Competitor> Competitors { get; set; }

    public IList<Match> Matches { get; set; }

    public Team()
    {
        Competitors = new List<Competitor>();
        Matches = new List<Match>();
    }
}

public class Competitor
{
    public int Id { get; set; }

    public string CompetitorName { get; set; }

    public int UserId { get; set; }

    public DateTime SignUpDate { get; set; }
}

所以有一个匹配,其中有一个得分列表(通常是两个),这些得分有一个附加到他们的团队,然后每个团队都有一个竞争者列表(通常是1-2)。

我要做的是找到UserId为某个竞争对手的比赛得分(分数)。

所有比赛都会让用户参与其中,因此无需担心没有为他们找到分数。

我尝试了很多不同的组合,现在我坐下来了:

match.Scores.FirstOrDefault(x => x.Team.Competitors.FirstOrDefault(u => u.UserId == User.UserId)).Points.Value;

我认为我走错了方向,当我应该以另一种方式做的时候向外走。

非常感谢任何帮助

谢谢。

1 个答案:

答案 0 :(得分:0)

找到答案。

match.Scores.FirstOrDefault(x => x.Team.Competitors.Any(u => u.UserId == User.UserId)).Points.Value;

所以这基本上就是说。

获取第一个分数的积分属性。

有一个团队,其中包含一个userId等于User objects Id

的竞争对手