LINQ选择使用.split()

我有一个逗号分隔的字符串存储在数据库中。

例如: record1 = "1,3,5,7,9,10"record2 = "4,5,10"

我有一个给定的信息,例如: 1

我必须使用包含给定信息1的LINQ来选择记录。

返回的结果应为record1。

如果我单独使用.contains(),它就不准确,因为也会返回record2。

我怎样才能做到这一点? 是否可以在单个LINQ查询中实现?

谢谢你的建议!

使用单个LINQ到对象查询:

 string[] records = new[] { record1, record2 }; string record = records.FirstOrDefault(r => r.Split(',').Any(s => s == "1")); 

演示

首先,我想提一下@Tim Schmelter所说的话 –

您是否注意到真正的问题是您的令人毛骨悚然的数据模型? 使用具有真实记录的表而不是具有逗号分隔字符串的列。

在需要字符串拆分匹配的地方使用datamodel并不是一个好习惯。 因为它会导致系统效率低下,更不用说慢速查询了。 但是,如果你真的需要一个解决方案,为什么不尝试这个 – 。

有四种情况你会得到一场比赛,

  1. 前缀匹配 – 以。开头
  2. 内部匹配 – 包含
  3. 后缀匹配 – 结束
  4. 唯一的匹配 – 只有一个项目,这就是它

考虑到我建议下面的解决方案的情景 –

 s is the value looking for say "1" string prefixMatch = s + ","; string suffixMatch = "," + s; string innerMatch = "," + s + ","; string record = .FirstOrDefault(r=> r.StartsWith(prefixMatch) || r.Contains(innerMatch) || r.EndsWith(suffixMatch) || (!r.Contains(",") && r == s)); 

这种详细查询的原因是为了减少内存利用率,让SQL查询执行查找结果的艰苦工作,因为此查询将支持LINQ-to-SQL转换。

如果我理解正确,您需要包含“1”的结果记录。 所以你可以使用:

 private bool GerRecord(string record) { string[] arr=record.Split(','); return arr.Contains("1"); } 

您可以尝试1,(1和逗号组合)在linQ中的Contains中搜索,而不是搜索1