我在数据库中存储了逗号分隔的字符串。
例如:record1 = "1,3,5,7,9,10"
和record2 = "4,5,10"
我有一个给定的信息,例如:1
。
我必须使用LINQ选择记录包含给定的信息1.
返回的结果应为record1。
如果我单独使用.contains(),它就不准确,因为也会返回record2。
我怎样才能实现这一目标?是否可以在单个LINQ查询中实现?
感谢您的建议!
答案 0 :(得分:6)
使用单个LINQ到对象查询:
string[] records = new[] { record1, record2 };
string record = records.FirstOrDefault(r => r.Split(',').Any(s => s == "1"));
答案 1 :(得分:1)
首先,我想提一下@Tim Schmelter所说的话 -
你有没有注意到真正的问题是你的毛骨悚然 数据模型?使用具有真实记录的表而不是具有a的列 逗号分隔的字符串。
在需要字符串拆分匹配的地方使用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-to-SQL转换。
答案 2 :(得分:0)
如果我理解正确,您需要包含“1”的结果记录。所以你可以使用:
private bool GerRecord(string record)
{
string[] arr=record.Split(',');
return arr.Contains("1");
}
答案 3 :(得分:0)
而不是搜索1,你可以尝试1,(1和逗号组合)在linQ中的Contains中搜索