LINQ选择使用.split()

时间:2014-05-07 07:35:32

标签: c# linq

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

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

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

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

返回的结果应为record1。

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

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

感谢您的建议!

4 个答案:

答案 0 :(得分:6)

使用单个LINQ到对象查询:

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

Demo

答案 1 :(得分:1)

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

  

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

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

有四次你会得到一场比赛,

  1. 前缀匹配 - 以
  2. 开头
  3. 内部匹配 - 包含
  4. 后缀匹配 - 以
  5. 结尾
  6. 唯一的匹配 - 只有一个项目,这就是它
  7. 考虑到我建议下面的解决方案 -

    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中搜索