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”之后
答案 0 :(得分:1)
正如Jure建议的那样,请使用SqlFunctions.PatIndex
测试:给定一个包含3条记录的字符串表:
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