LINQ select using .split()
本文关键字:split using select LINQ | 更新日期: 2023-09-27 18:02:00
我有一个逗号分隔的字符串存储在数据库中。
。: record1 = "1,3,5,7,9,10"
和record2 = "4,5,10"
并且我有一个给定的信息,例如:1
。
我必须使用LINQ选择包含 1的给定信息的记录。
返回的结果应该是record1.
如果我只使用。contains(),它是不准确的,因为也会返回record2。
我怎么才能做到呢?是否有可能在单个LINQ查询中实现这一点?
谢谢你的建议!
使用一个LINQ-to-objects查询:
string[] records = new[] { record1, record2 };
string record = records.FirstOrDefault(r => r.Split(',').Any(s => s == "1"));
首先我想提一下@Tim Schmelter说的话-
你有没有注意到真正的问题是你的猥琐datamodel吗?使用包含真实记录的表,而不是包含逗号分隔的字符串。
在需要字符串拆分匹配的地方使用datamodel
不是一个好的做法。因为它会导致系统效率低下,更不用说查询速度慢了。但是,如果你真的需要一个解决方案,为什么不试试这个呢?
有四种情况你会得到一个匹配,
- 前缀匹配-从 开始
- 内部匹配-包含
- 后缀匹配-以 结尾
- 唯一的匹配-只有一个项目,这是它
考虑到这种情况,我建议解决方案如下-
s is the value looking for say "1"
string prefixMatch = s + ",";
string suffixMatch = "," + s;
string innerMatch = "," + s + ",";
string record = <dbRecords>.FirstOrDefault(r=> r.StartsWith(prefixMatch) ||
r.Contains(innerMatch) || r.EndsWith(suffixMatch) ||
(!r.Contains(",") && r == s));
这样一个详细的查询的原因是保持内存使用较少,并让SQL查询做查找结果的艰苦工作,因为这个查询将支持linq到SQL的转换。
如果我理解正确,您需要作为包含"1"的结果记录。所以你可以使用:
private bool GerRecord(string record)
{
string[] arr=record.Split(',');
return arr.Contains("1");
}
不搜索1,您可以尝试在Contains in linQ