Ich würde das zuletzt gespielte Datum für jedes Team cachen, dann gehe durch alle Spiele und wähle die Spiele aus, die deiner Definition von "gespielt vor 2 Tagen" entsprechen (könnte vor mindestens 2 Tagen gespielt haben, genau vor 2 Tagen, mindestens 2, aber nicht mehr als 3 Tage, etc ...)
var lastPlayedQuery = (from game in Game
group game by game.TeamID into g
let lastPlayedDate = g.Select(x => x.GameDate).Max()
select new { TeamID = game.TeamID, LastPlayedDate = lastPlayedDate }).ToDictionary(x => x.TeamID, x => x.LastPlayedDate);
var gamesTwoDaysLater = from game in Games
let lastPlayedDate = lastPlayedQuery[game.TeamID]
let elapsedDays = (game.GameDate - lastPlayedDate).TotalDays
where elapsedDays >= 2.00 && elapsedDays < 3.00
select game;
Edit: Finden Sie alle Paare von zwei Tagen
var teamGameLookup = Games.ToLookup(x => x.TeamID);
var twoDayApartGames = from game in Games
join secondGame in teamGameLookup[game.TeamID]
on game.GameDate.Date equals secondGame.GameDate.Date.AddDays(2)
select new { Game = game, GameTwoDaysEarlier = secondGame };
getrennt Spielen
Edit: Finden Sie alle Paare von durch zwischen X bis Y Tage getrennt Spiele
var teamGameLookup = Games.ToLookup(x => x.TeamID);
var seperatedGames = from game in Games
join otherGame in teamGameLookup[game.GameID]
on DatesWithinRange(game.GameDate,otherGame.GameDate,2,25) equals true
let daysApart = (game.GameDate - otherGame.GameDate).TotalDays
select new { Game = game, OtherGame = otherGame, DaysApart = daysApart};
private bool DatesWithinRange(DateTime firstDate, DateTime secondDate, float lower, float higher)
{
float elapsedDays = (secondDate - firstDate).TotalDays;
return elapsedDays >= lower && elapsedDays <= higher;
}
Ihre Anfrage scheint nicht die Beschreibung entsprechen, was Sie zu tun versuchen. –
Entschuldigung, es gibt eine zusätzliche Einschränkung basierend auf der TeamID. IE "finde alle Spiele, bei denen das spielende Team (basierend auf teamID) vor 2 Tagen gespielt hat". Ist das sinnvoll? – qi1