C#LINQ按位置搜索

时间:2018-01-19 21:20:52

标签: c# sql asp.net sql-server linq

我试图在LINQ中重新创建以下SQL查询:

select * from table where column like 'RECORD_%01'

我拥有的是:

var data = from t in context.table 
           where t.column.StartsWith("RECORD")
           && t.column.EndsWith("01")
           select t;

相当于:

select * from table where column like 'RECORD%01'

有人可以帮助我如何添加'_%'的条件,而不是'%'吗? 如果你们不知道我在谈论SQL问题,请查看以下image,它解释了SQL。

3 个答案:

答案 0 :(得分:2)

这是你想要的(或类似的东西):

https://docs.microsoft.com/en-us/dotnet/api/system.data.linq.sqlclient.sqlmethods.like

LINQ2SQL LIKE Command for Phrase

这允许您指定LIKE语句。

var data = from t in context.table 
           where SqlMethods.Like(t.column, "RECORD_%01")
           select t;

答案 1 :(得分:0)

以这种方式:

var data = from t in context.table 
           where t.column.StartsWith("RECORD")
           && t.column.EndsWith("01")
           && t.column.Length > 8
           select t;

这可以确保RECORD01之间至少有一个字符。

当然,根据您使用的查询提供程序,您可能只想尝试使用SqlMethods.LikeSqlFunctions.PatIndex或其中一种方法来使用LIKE运算符here

答案 2 :(得分:0)

从这看起来你似乎想确保

  1. 以RECORD开头
  2. 以01
  3. 结束
  4. 在01之前的RECORD之后至少有一个字符
  5. 在这种情况下,您可以检查开始时间,结束时间以及长度。

    var data      =    from t in context.table 
                        where t.column.StartsWith("RECORD")
                        && t.column.EndsWith("01")
                        && t.column.Length>=9
                        select t;