Фильтрация данных XML с помощью LinQ - PullRequest
0 голосов
/ 19 апреля 2011

Я занимаюсь разработкой приложения для Windows Phone 7.

У меня есть список идентификаторов из таблицы, и я хочу отфильтровать файл XML, содержащий всю информацию об этой таблице.

У меня есть следующий код C #:

var filteredData = 
    from c in loadedData.Descendants("gameDescription")
    where c.Attribute("gameType").Value == gameType &&
          c.Attribute("language").Value.Equals(language)
    select new SampleData.GamesDesc()
    {
        Id = uint.Parse(c.Attribute("game_id").Value),
        . . .
    };

Если у меня есть List<long> unfinishedGamesId. Я хочу, чтобы результаты поиска были получены в каждой игре, у которой нет идентификатора от unfinishedGamesId. Что-то вроде:

c.Attribute("game_id").Value != unfinishedGamesId[0] &&
c.Attribute("game_id").Value != unfinishedGamesId[1] &&
...

Как я могу добавить это к предложению where?

1 Ответ

0 голосов
/ 19 апреля 2011

Что вы пытаетесь сделать? Если вы хотите включить данные, значения которых находятся в этом списке, запрос будет:

var filteredData = 
    from c in loadedData.Descendants("gameDescription")
    where c.Attribute("gameType").Value == gameType &&
          c.Attribute("language").Value.Equals(language) &&
          unfinishedGamesId.Contains(c.Id)
    select new SampleData.GamesDesc()
    {
        Id = uint.Parse(c.Attribute("game_id").Value),
        . . .
    };

Предполагая, что значение Id совпадает с uint.Parse, этот код должен работать:

var filteredData = 
   from c in loadedData.Descendants("gameDescription")
   where c.Attribute("gameType").Value == gameType &&
         c.Attribute("language").Value.Equals(language) &&
         unfinishedGamesId.Contains(uint.Parse(c.Attribute("game_id").Value))
   select new SampleData.GamesDesc()
   {
       Id = uint.Parse(c.Attribute("game_id").Value),
       . . .
   };

Выполнение поиска и анализа атрибутов дважды не очень эффективно, но я не уверен, как это исправить.

...