通过LINQ检查分隔字段中的值

时间:2015-09-16 12:24:33

标签: c# linq linq-to-sql

我有一个带有csv字段的Db表,名为" Line"。 字段中有几个值以分号分隔。

我正在尝试找到一个LINQ表达式来检查" Line"中是否存在第二个值的行。字段具有特定值。

类似的东西:

if (dbContext.Test.Any(t => Array.IndexOf(t.Line.Split(';'), value) = 1))
{
Do something ...                          
}

示例:

Line = "value1;apple;value3;value4"
if (dbContext.Test.Any("second value in Line field equals 'apple'"))
{
Do something ...
}

最直接,最简洁的方法是什么?

3 个答案:

答案 0 :(得分:1)

由于您似乎正在使用DbContext并且没有机制来翻译拆分字符串或按索引搜索,您需要获取超出必要数据的更多数据,然后在linq-中过滤到对象。您可以使用初始基本过滤器来限制返回的行数,但是您需要在内存中进行剩余的过滤:

var queryEF = dbContext.Test
                       .Where(t => t.Line.Contains(";" + value" + ";");

var queryMemory = queryEF.AsEnumerable()   // shift to Linq-to-Objects
                         .Where((t => Array.IndexOf(t.Line.Split(';'), value) == 1);

if (queryMemory.Any())
{
    //Do something ...
}

答案 1 :(得分:0)

如果你只是想检查一下,Linq是一个简单的方法。

请执行以下操作:

  1. 参加专栏
  2. 拆分它的内容
  3. 如果拆分列表中有多个元素,请继续
  4. 证明第二个元素是否正在寻找。
  5. 您应该考虑规范化您的数据,因为存储冗余/非标准化数据可能会导致其他问题。

    修改

    好的,在这种情况下使用linq并不像我想的那么容易,因为我们没有任何索引信息。这很容易,应该有效:

    string line = "value1;apple;value3;value4";
    string[] splitted = line.Split(new char[] { ';' });
    if (splitted.Length > 1 && splitted[1] == "apple")
    {
        Console.WriteLine("APPLE!");
    }
    

答案 2 :(得分:0)

据我所知,你的表(dbContext)包含一组行(Test)?

你可以使用'where'将该集合减少到只满足条件的元素(在这种情况下,我用分号分割字符串,看看第二个字符串是否等于apple。'任何'将会如果有一个或多个匹配则返回true。

        if(dbContext.Test.Where(x => x.Line.Split(';')[1] == "apple").Any())
        {
            // Do the thing
        }