protected void PlayerYearData_Selecting(object sender, LinqDataSourceSelectEventArgs e) { if (reference == null) { reference = cbSeason.SelectedItem.Value; } IScoreCalculator calculator = CalculatorFactory.GetScoreCalculator(reference); var events = doc.Element("Fixtures").Elements("Fixture") .Where(ee => (string)ee.Attribute("Season") == reference) .Where(ee => (string)ee.Attribute("PlayerOfTheYear") == "True") .OrderBy(ee => (string)ee.Attribute("Reference")) .Select(ee => new { reference = (string)ee.Attribute("Reference"), location = (string)ee.Attribute("Location"), abbrevation = (string)ee.Attribute("Abbreviation") }); List <string> evs = events.Select(ee => ee.abbrevation).ToList(); List <PlayerYearInfo> PlayerOfTheYearTable = doc1.Element("Members").Elements("Member") .Select( ee => new PlayerYearInfo((string)ee.Attribute("Name"), evs, calculator)).ToList(); int counter = 0; foreach (var ev in events) { counter++; IEnumerable <XElement> results = doc.Element("Fixtures").Elements("Fixture") .Where(ee => (string)ee.Attribute("Reference") == ev.reference) .Descendants("Score") .Where( ff => (string) ff.Ancestors("Result").SingleOrDefault().Attribute("PlayerOfTheYear") == "True") .Select(ee => ee); foreach (XElement score in results) { PlayerYearInfo player = PlayerOfTheYearTable.Where(ee => ee.Player == (string)score.Attribute("Name")) .Select(ee => ee) .SingleOrDefault(); if (player != null) { player.RecordEvent(ev.abbrevation, (int)score.Attribute("Position")); } } } e.Result = PlayerOfTheYearTable.Where(ee => ee.Total > 0).OrderByDescending(ee => ee.Total).Select(ee => ee); }