C#LINQ按位置搜索

C#LINQ按位置搜索,c#,sql,asp.net,sql-server,linq,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 * f

我正在尝试在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问题,请检查以下内容,这解释了SQL。

这里有一种方法:

var data = from t in context.table 
           where t.column.StartsWith("RECORD")
           && t.column.EndsWith("01")
           && t.column.Length > 8
           select t;
这确保在
记录
01
之间至少有一个字符


当然,根据您使用的查询提供程序的不同,您可能希望简单地尝试使用
LIKE
操作符using,或者使用所描述的其中一种方法。

由此看来,您希望确保

  • 从唱片开始
  • 以01结尾
  • 01之前的记录后至少有一个字符
  • 在这种情况下,您可以检查“开始于”、“结束于”以及“长度”

    var data      =    from t in context.table 
                        where t.column.StartsWith("RECORD")
                        && t.column.EndsWith("01")
                        && t.column.Length>=9
                        select t;
    
    这就是您想要的(或非常类似的东西):

    这允许您指定LIKE语句

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

    您缺少长度检查。您需要添加一个检查,其中字符串的长度至少为9(“记录”=6”,“记录”=1%,无所谓,“01”=2)。这可能是一个明显的问题,但您是否尝试过。StartsWith(“记录”?)?我很好奇LINQ是否足够聪明,可以避开你似乎不知道的下划线。这是linq2sql还是另一个orm?您可以使用一些特定于数据库的功能use@ColdSolstice测试表明LINQ创建了一个自定义转义字符,并在SQL查询中使用它。虽然这是一个解决方案,但它不是她要求的解决方案。我自己刚刚发现了这个-
    SQLMethods
    看起来很方便。为什么要投否决票?如果我的回答有错误或不准确的地方,我很乐意改正。