使用LinQ过滤XML数据

时间:2011-04-19 14:35:11

标签: windows-phone-7 linq-to-xml where-clause

我正在开发一个Windows Phone 7应用程序。

我有一个表中的ID列表,我想过滤一个包含有关这些表的所有信息的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的Id。类似的东西:

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

如何将此添加到where子句?

1 个答案:

答案 0 :(得分:0)

你想做什么?如果您想要包含其值在该列表中的数据,则查询将为:

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

执行属性查找和解析两次效率不高,但我不知道如何解决这个问题。