У меня есть два списка, которые содержат направляющие:
var activeSoftware = channels.ByPath("/software/").Children.Where(c => c.StateProperties.IsActive).Select(c => c.Guid);
var activeChannels = channels.ByPath("/game-channels/").Children.Where(c => c.StateProperties.IsActive).Select(c => c.Guid);
и другой список игр:
List<MyCms.Content.Games.Game> games = new List<MyCms.Content.Games.Game>();
игровой объект имеет два свойства, которые можно использовать:
game.gamingproperties.software
- содержит руководство по программному обеспечению
game.stateproperties.channels
- список разделенных запятыми указателей
да, я знаю, что нехорошо сохранять значения через запятую в поле,
но я не могу изменить его в данный момент (он уже работает на 40+ сайтах)
что я хочу сделать, это выбрать все игры, в которых программное обеспечение активно (сравнивая softwarelist
с game.gamingproperties.software
) и что каналы, в которых они отображаются, активны (проверяя, содержит ли game.stateproperties.channels
какой-либо из activechannels
направляющих)
Первоначально я сделал это так:
foreach (var channel in activeSoftware)
{
foreach (var match in oGames.AllActive.Where(g => !string.IsNullOrEmpty(g.GamingProperties.UrlDirectGame) && g.GamingProperties.Software.Contains(channel) && g.StateProperties.Channels.Split(',').Intersect(activeChannels).Any()))
{
games.Add(match);
}
}
но я уверен, что смогу избавиться от этих мерзких foreach и просто использовать linq.