比较两个 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));
}
我有两个 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));
}