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
并不是一个好习惯。 因为它会导致系统效率低下,更不用说慢速查询了。 但是,如果你真的需要一个解决方案,为什么不尝试这个 – 。
有四种情况你会得到一场比赛,
- 前缀匹配 – 以。开头
- 内部匹配 – 包含
- 后缀匹配 – 结束
- 唯一的匹配 – 只有一个项目,这就是它
考虑到我建议下面的解决方案的情景 –
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