【问题标题】:C#: Check if string is contained in a string separated by commasC#:检查字符串是否包含在用逗号分隔的字符串中
【发布时间】:2018-06-26 11:53:42
【问题描述】:

我在数据库的表中有一个列,其中字符串以以下形式存储:1,5,10。在我的应用程序中,我想检查此列中是否存在变量。

如果我这样检查:

table.column.Contains(variable)

如果variable = 0 那么我会得到正确的,因为10 包含0 但它不正确。

我知道我可以这样做:

table.column.Split(',') 

但是如何检查table.column 字符串中是否有任何部分与变量相等?

【问题讨论】:

  • 说实话,真正的解决方法是不要将数据存储在这样的数据库中。相反,您需要一个包含值和一对多关系的单独表。
  • split 是正确的做法。听起来您的数据库架构也有缺陷。
  • 我知道但无法更改数据库架构.... 是否有针对该架构的解决方案?
  • 在列数据中使用逗号是一种糟糕的设计。
  • 还有什么是table,如果这是EF,并且您希望查询在数据库上执行,那么Split 将不起作用。您需要测试它包含“,0”或以“0”开头或以“,0”结尾或等于“0”的可能性。

标签: c# string split contains


【解决方案1】:

假设table.columnvariable 都是string 值,您可以这样做:

table.column.Split(',').Contains(variable)

【讨论】:

  • 这是最好的方法。正则表达式是可能的,但不太清楚。
【解决方案2】:

我认为您遇到的问题是,当您进行拆分时,结果将是一个字符串数组。因此,tecincally contains 1 和 contains 10 都会命中。假设您的列表是数字,您可以进行拆分并将它们转换为数字以解决此问题。

var sNumbers = "9,5,10";

var numbers = sNumbers.Split(',').Select(Int32.Parse).Contains(1);

这当然只有在一切都是数字的情况下才有效

【讨论】:

  • OP 没有指定字符串中的所有内容都必须是 int
  • 您不需要ToList 来执行Contains
  • @MaxwellBurnham 我知道这就是我在底部添加注释的原因。看来它们是 int 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2011-01-21
  • 2013-01-08
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多