【问题标题】:How to get distinct values from 2 different columns in the same list如何从同一列表中的 2 个不同列中获取不同的值
【发布时间】:2023-03-08 13:05:01
【问题描述】:

正如您从下面的代码中看到的那样,我有一个名为 Matches 的列表对象,我想从中获取来自 HomeTeam 和 AwayTeam 的不同球队的单个列表。我正在尝试使用 LINQ,如果我只使用 HomeTeam 参数或 AwayTeam 参数但不能同时使用两者,我可以获得不同团队的列表。

谢谢。

public class Match
{
    public int ID { get; set; }
    public string Country { get; set; }
    public string Championship { get; set; }
    public string Seasson { get; set; }
    public DateTime MatchDate { get; set; }
    public string HomeTeam { get; set; }
    public int HomeScore { get; set; }
    public int AwayScore { get; set; }
    public string AwayTeam { get; set; }
}

private List<Match> Matches;

Matches = dataAccess.GetAllMatches();

我正在尝试做这样的事情:

结果 = Matches.Select(HomeTeam, AwayTeam).Distinct().ToList();

【问题讨论】:

    标签: list linq lambda


    【解决方案1】:

    冒着闻起来像家庭作业的风险,提示而不是代码。获取您的主队,联合您的客队并对结果应用 Distinct。

    【讨论】:

      【解决方案2】:

      所以我终于想出了这个解决方案。

      请注意,现在我不仅需要获取团队,还需要获取团队所属的国家/地区。

      public class Team
      {
          public string Name { get; set; }
          public string Country { get; set; }
      }
      

      所以 Union 确实在这里完成了这项工作,但现在我需要将它作为匿名类型来获取......这是代码:

      List<Team>  teams =  new List<Team>();
      
      var result = Matches.Select(x => new { Name = x.HomeTeam, Country = x.Country }).Union(Matches.Select(x => new { Name = x.AwayTeam, Country = x.Country })).ToList();
      
      foreach (var record in result)
      {
      teams.Add(new Team { Name = record.Name, Country = record.Country });
      }
      
       return teams;
      

      我更喜欢这种方式:

      List<Team> teamsResult = Matches.Select(x => new Team { Name = x.HomeTeam, Country = x.Country }).Union(Matches.Select(x => new Team { Name = x.AwayTeam, Country = x.Country })).ToList();
      

      但是这种方式会重复,所以我现在将坚持第一个示例。

      你认为这是更优雅的方式吗?

      谢谢。

      【讨论】:

        【解决方案3】:

        你可以利用GroupBy,像这样:

        IEnumerable<Team> teams = Matches.GroupBy(m => new { m.AwayTeam, m.HomeTeam, m.Country })
                        .Select(
                            g =>
                                new[]
                                {
                                    new Team {Country = g.Key.Country, Name = g.Key.AwayTeam},
                                    new Team {Country = g.Key.Country, Name = g.Key.HomeTeam}
                                })
                        .SelectMany(x => x)
                        .GroupBy(t => new { t.Name, t.Country })
                        .Select(g => new Team { Name = g.Key.Name, Country = g.Key.Country });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-11
          • 1970-01-01
          • 2021-06-21
          • 2016-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-26
          相关资源
          最近更新 更多