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 select using .split()

使用一个LINQ-to-objects查询:

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

首先我想提一下@Tim Schmelter说的话-

你有没有注意到真正的问题是你的猥琐datamodel吗?使用包含真实记录的表,而不是包含逗号分隔的字符串。

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

有四种情况你会得到一个匹配,

  1. 前缀匹配-从
  2. 开始
  3. 内部匹配-包含
  4. 后缀匹配-以
  5. 结尾
  6. 唯一的匹配-只有一个项目,这是它

考虑到这种情况,我建议解决方案如下-

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

中搜索1,(1和逗号组合)