使用Linq Indexof StartIndex而不实现

时间:2013-12-23 22:19:03

标签: c# vb.net linq

Linq-to-Entities似乎不识别IndexOf(String,Int)。 Int是起始指数。有没有人知道不需要实现的解决方法?我想保持iqueryable,而不设置tolist或IEnumerable。

以下是用例。

query = query.Where(Function(TableName) TableName.TableColumn.IndexOf(previousItem) <    TableName.TableColumn.IndexOf(item, TableName.TableColumn.IndexOf(previousItem)))

query = IQueryable

这行代码紧跟在第N个(其中n> 0)关键字之后。启动索引是必要的,以确保在字符串“ABC%EFG”中,“EFG”在“ABC”之后

1 个答案:

答案 0 :(得分:1)

正如Jure建议的那样,请使用SqlFunctions.PatIndex

测试:给定一个包含3条记录的字符串表:

  1. Billy Bob Joe
  2. Bob Billy Joe
  3. Joe Billy Bob
  4. LINQ的

    var q = db.Strings
        .Where(x => SqlFunctions.PatIndex("%Joe%Bil%Bob", x.Text) > 0)
        .Select(x => x.Text);
    

    返回: Joe Billy Bob

    T-SQL Profiler

    SELECT 
    [Extent1].[Text] AS [Text]
    FROM [dbo].[Strings] AS [Extent1]
    WHERE ( CAST(PATINDEX(N'%Joe%Bil%Bob', [Extent1].[Text]) AS int)) > 0