2016-03-21 20 views
-4

Ich habe zwei Ienumerables. Zuerst bestehen Volleyball, Basketball, Fußballveranstaltungen. Second - vollständige Geschichte der Spiele. Seine alle String, weil ich analysiere seineVergleichen Sie zwei IEnumerable

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; } 
    } 

Ich brauche vorherige Spiele des Teams zu zeigen, die an Ereignisse stattfindet. Team kann in früheren Spielen Erste oder Zweite Mannschaft sein.

Ich versuche dies:

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;  
      } 

als Ergebnis muss ich zeigen, Datum, FirstTeam, FirstTeamGoals, SecondTeam, SectGoals. Ziele vergleichen und zeigen: Team gewann die letzten 3 Spiele (zum Beispiel).

+2

Ihre 'Date' Eigenschaft sollte typeof' DateTime' und Ihre 'FirstTeamGoals' und' SecondteamGoals' sein müssen typeof 'int' (Sie nichts gehen zu können, vergleichen mit' string') –

Antwort

1

Wenn ich das Problem verstehe "erste Mannschaft" und "zweite Mannschaft" unterscheiden sich semantisch nicht. Wenn dies der Fall ist, müssen Sie Datensätze hinzufügen, in denen die erste Mannschaft als "zweite" aufgeführt ist und umgekehrt.

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

Die obige Funktion gibt ein Ergebnis in Events für einen bestimmten Eintrag gesetzt

alle Einträge einfach die Ereignisse wiederholen Konsolidierung Ergebnisse in einer Liste hinzugefügt:

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

Statt nur historische Speicherung Daten können Sie die Geschichte verarbeiten die Statistiken, die Sie benötigen.

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