LINQ to SQL:IQueryable - 字符串包含 - 方法不支持到 SQL 的转换

fir*_*pol 4 linq-to-sql

亲爱的 LINQ 或 linq2sql 专家,你能帮我解决这个问题吗?

我有 Book 类,每本书都有一个列表,我想要的是找到作者列表中作者姓氏包含特定 searchAuthor 字符串的书籍,如下所示:

string searchAuthor = "foo";
IQUeryable books = BookStaticRepository.SelectAll();

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname, StringComparison.OrdinalIgnoreCase)));
Run Code Online (Sandbox Code Playgroud)

我得到这个错误是什么:

方法“Boolean Contains(System.String, System.String, System.StringComparison)”不支持对 SQL 的转换。

我已经尝试过相同的操作,但使用 IEnumerable,并且它有效。由于性能问题,我不得不切换到 IQueryable...我需要它与 IQueryable 一起工作。

感谢您的帮助。

Mig*_*Mig 5

该特定的重载Contains不起作用,但忽略StringComparison将使其转换为 SQL,这将生成一个LIKE %SearchInput%. 默认情况下,这将不区分大小写,除非您的数据库设置为区分大小写。

就像这样:

string searchAuthor = "foo";
IQUeryable books = BookStaticRepository.SelectAll();

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname)));
Run Code Online (Sandbox Code Playgroud)