1

我有一个针对 XML 的 LINQ 查询,它给了我一个嵌套列表的列表,每个子列表都是一个元素(“行”)属性的列表。

var items = loadbodies.Descendants("row").Select(a => a.Attributes().Select(b => b.Value).ToList()).ToList();

这按预期工作,但我真正需要的是针对另一个值列表查询它,以免添加子列表,其中元素属性之一(“messageID”)位于第二个列表中。我可以为一个值执行此操作,但需要对照整个第二个列表进行检查。

下面是通过第二个列表中的单个硬编码值排除单个子列表的查询。

var items = loadbodies.Descendants("row").Where(c => (string)c.Attribute("messageID") != "avaluefromthesecondlist").Select(a => a.Attributes().Select(b => b.Value).ToList()).ToList();

任何帮助将非常感激。

4

1 回答 1

1

只需使用Contains. 请注意,分割线极大地提高了可读性:

var ids = ...; // Some sequence of ids, e.g. a List<string> or HashSet<string>
var items = loadbodies
      .Descendants("row")
      .Where(row => ids.Contains((string) row.Attribute("messageId")))
      .Select(a => a.Attributes()
                    .Select(b => b.Value)
                    .ToList())
      .ToList();

请注意,您也可以使用Join呼叫......但只要您的 ID 相对较少,这应该没问题。

于 2013-04-05T15:36:15.043 回答