【问题标题】:find item inside list of list在列表列表中查找项目
【发布时间】:2016-10-24 17:24:01
【问题描述】:

我有一个客户列表,其中有另一个客户列表,称为系列。我的系列可以是null 或包含数据。 我怎样才能找到任何匹配系列值的项目。我尝试了以下两种方法,但都没有成功。

results = customers.Where(d => d.Series.Any(s => s.Contains("item")));

results = customers.Where(d => d.Series.Count() != 0).Where(s => s.Series.Contains("item"));

谢谢!

【问题讨论】:

  • 究竟是什么不起作用?如果customers.Series 为空,您可能会得到一个空引用异常……这是问题所在吗?在旁注中,使用d.Series.Count() 在您使用它的上下文中效率低下,因为它将遍历所有系列项目以确定是否有零。出于您的目的,请使用 d.Series.Any() 这只会检查是否存在一个 - 为您节省许多循环操作。
  • 我也想知道具体的问题是什么。如您所见,您得到的答案与您发布的代码中的第一行相同(除了空检查,并且两个答案都不使用 .Contains 在“任何”中)。
  • 是否应该将空集包含在输出中?

标签: c# linq list


【解决方案1】:

我会选择:

results = customers.Where(d => d.Series!= null && d.Series.Any(s => s.Contains("item")));

如果您希望Series 中的元素实际包含字符串"item"

results = customers.Where(d => d.Series!= null && d.Series.Any(s => s.Equals("item")));

如果您希望Series 中的元素与item 完美匹配。

【讨论】:

  • 如果您的列表“系列”包含“itemized”之类的词,当您检查“item”时,它仍然会给您一个匹配项,即。由于代码s.Contains("item"),它将进行部分匹配。
  • @AmeyKamat 我知道,这可能是 OP 想要的行为,因为这也是他的方法:s.Series.Contains("item")s.Contains("item")。万一不是你想要的,可以简单地使用Equals== 运算符。指出这一点仍然很好。谢谢!
  • cust.Series.Contains("item")cust.Series.Any(s => s.Contains("item")) 是两个不同的东西。 cust.Series.Contains("item") 将检查“item”是否包含在列表中(完全匹配),cust.Series.Any(s => s.Contains("item")) 将检查“item”是否包含在 Series 列表中的每个字符串中。仅供参考
  • @AmeyKamat 你是完全正确的,这次收集和字符串之间的区别抓住了我。这应该是一种很好的方法,我会更新我的答案以反映这一点。
【解决方案2】:

也许这就是你所期望的,

//For case sensitive
var results = customers.Where(d => d.Series != null && d.Series.Contains("item")));

//For case insensitive
var results = customer.Where(d => d.Series != null && d.Series.Any(x => x.Equals("item", StringComparison.CurrentCultureIgnoreCase)));

【讨论】:

    【解决方案3】:
    results = customers.Where(d => d.Series != null && d.Series.Any(s => s == "item"));
    

    这将返回其 Series 集合包含值“item”的所有客户。

    【讨论】:

    • 如果d.Series 为空,则会抛出异常
    • @MatthewWhited 答案改进了。
    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 2014-10-13
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2021-12-24
    • 2023-03-11
    相关资源
    最近更新 更多