2017-06-29 23 views
0

コードからわかるように、Matchesという名前のリストオブジェクトがあります。このリストオブジェクトからは、 HomeTeamとAwayTeam。私はLINQを使用しようとしています。私はHomeTeamパラメータまたはAwayTeamパラメータのみを使用し、両方を一緒に使用しない場合、別個のチームのリストを取得できます。同じリスト内の2つの異なる列から異なる値を取得する方法

ありがとうございます。

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メソッド();

答えて

0

これは宿題のような匂いがする危険があり、コードではなくヒントです。あなたのホームチームを獲得し、離れたチームを組んで、Distinctを結果に適用してください。

+0

私はあなたにどのような方法を趣味に感謝しています:) –

0

私は最終的にこの解決策を考え出します。

今私は、チームだけでなくチームが属する国も取得する必要があることに注意してください。

:私はこの方法を好むだろう

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; 

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

だから、連合は本当にここに仕事をするが、今ので、私は匿名型としてそれを取得する必要があります...ここのコードです

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(); 

しかし、この方法では重複が発生するので、私は今のところ最初の例に固執します。

あなたはよりエレガントな方法だと思いますか?

ありがとうございます。

0

あなたはこのように、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 }); 
関連する問題