【问题标题】:Compare 2 different Lists between List<XElement> and List<String>比较 List<XElement> 和 List<String> 之间的 2 个不同的列表
【发布时间】:2016-11-25 01:55:53
【问题描述】:

我有一个这样的 XElement 列表:

List<XElement> x = rootx.Elements("table").Elements("row").Where(row => row.Elements("column").ElementAt(1).Value == "1").ToList<XElement>();

然后我得到另一个这样的字符串列表:

List<String> CoList = ds.Tables[0].AsEnumerable().Select(dataRow => dataRow.Field<string>("id")).ToList();

如何创建一个新的 XElement 列表以排除 x 中未在 CoList 中找到的项目?

例如,如果 x 包含 { a, b, c, d} 并且 CoList 包含 { a, c, d},我怎样才能返回一个包含 { a, c, d} 的新 x ?

有没有简单的方法来做到这一点?提示

【问题讨论】:

  • 我不明白你的例子。您说您想排除出现在 X 中但不在 CoList 中的元素。因此,如果 X 是 {a, b, c, d} 并且 CoList 是 {a, c, d} 那么您想要排除 b,对吗?但是b 出现在您的示例结果{a, b, d} 中。你的意思是说{a, c, d}
  • 是的,布赖恩你是对的! Tks 和我已经对上面的示例进行了更改。我的意思是 {a, c, d} 作为最终输出。
  • 嗨,Brian,我看到您发表了与 XElementEqualityComparer 方法相关的评论,但现在该评论已被删除。只是想知道如果列表包含 1000 多个条目,则 XElementEqualityComparer 方法是否有效? Tks
  • 我删除了我的答案,因为我意识到它并没有真正回答你提出的问题。我的回答是假设您正在比较两个 XElements 列表。但是现在我重新阅读了这个问题,我发现您确实是在将 XElements 列表与字符串列表进行比较。所以 XElementEqualityComparer 在这里不适用。我想我的问题是,您如何认为 XElement 等于字符串?你只是在 XElement 上做.ToString 吗?还是您取标签名称?还是价值?
  • @Trowa 进行有效比较,您可以使用 HashSet&lt;string&gt; 而不是 List&lt;String&gt;

标签: c# linq


【解决方案1】:

您可能希望以更复杂的方式将 y 转换为字符串,但这就是它的要点

var newList = x.Where(y => CoList.Contians(y.ToString()));

【讨论】:

  • List x1 = x.Where(y => CoList.Contains(y.Elements("column").ElementAt(0).Value));但我收到错误:无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员表?)如何解决这个问题?
  • 我已经通过添加 .ToList(); 解决了它在我上面的代码的末尾。
  • @Trowa 如果它解决了问题,请随时将其标记为正确答案。
猜你喜欢
  • 2012-06-07
  • 2022-11-21
  • 1970-01-01
  • 2020-01-26
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多