比较两个 IEnumerable

Compare two IEnumerable

我有两个 Ienumerables。首先包括排球、篮球、足球项目。 第二 - 完整的游戏历史。全是字符串,因为我解析了它的

public class Events
    {
        public string Date { get; set; }
        public string FirstTeam { get; set; }
        public string SecondTeam { get; set; }
    }

public class History
    {
        public string Date { get; set; }
        public string FirstTeam { get; set; }
        public string FirstTeamGoals { get; set; }
        public string SecondTeam { get; set; }
        public string SecondteamGoals { get; set; }
    }

我需要显示参加活动的团队的过往比赛。球队可以是前几场比赛的第一队或第二队。

我试试这个:

foreach (var teamInEvent in ListEvents)
            {
                var firstor = from p in History
                where p.FirstTeam == teamInEvent.FirstTeam || p.SecondTeam == teamInEvent.FirstTeam
                where p.SecondTeam == teamInEvent.SecondTeam || p.FirstTeam == teamInEvent.SecondTeam 
                select p;    
            }

因此我需要显示 Date、FirstTeam、FirstTeamGoals、SecondTeam、SectGoals。比较目标和显示:球队赢得了最后 3 场比赛(例如)。

如果我理解问题 "first team" 和 "second team" 在语义上没有区别。如果是这种情况,您需要包括第一支球队列为 "second" 的记录,反之亦然。

IQueriable<History> GetHistory(Events teamInEvent)
{
    // Normal Query
    var firstQuery = 
    from h1 in History
    select h1 
    where h1.FirstTeam == teamInEvent.FirstTeam || 
          h1.SecondTeam == teamInEvent.SecondTeam;

    // Query with the first and the second team fields swapped
    var secondQuery = 
    from h2 in History
    select new History { Date = h2.Date, 
                         FirstTeam = h2.SecondTeam, 
                         FirstTeamGoals = h2.SecondTeamGoals, 
                         SecondTeam = h2.FirstTeam,
                         SecondTeamGoals = h2.FirstTeamGoals 
                       }
    where h2.FirstTeam == teamInEvent.SecondTeam || 
          h2.SecondTeam == teamInEvent.FirstTeam;


   // Stitch two queries together
   return firstQuery.Concat(secondQuery);
}

上面的函数returns Events

中给定条目的结果集

要合并所有条目,只需重复将结果添加到列表的事件:

var list = new List<Tuple<Events, History[]>;
foreach (var teamInEvent in ListEvents)
{
    var item = Tuple.Create(teamInEvent, GetHistory(teamInEvent).ToArray());
    list.Add(item);
}

您不仅可以存储历史数据,还可以处理计算您需要的统计数据的历史记录。

foreach (var teamInEvent in ListEvents)
{
    var history = GetHistory(teamInEvent);
    var stats   = ComputeStats(teamInEvent, history); 
    list.Add(Tuple.Create(teamEvent, stats));
}