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

时间:2011-11-07 16:02:00

标签: linq-to-sql

亲爱的LINQ或linq2sql专家,您能帮我解决一下这个案例吗?

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

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

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname, StringComparison.OrdinalIgnoreCase)));

我得到了这个错误:

方法'布尔包含(System.String,System.String,System.StringComparison)'没有支持的SQL转换。

我已经尝试了相同但使用IEnumerable,并且它有效。我不得不切换到IQueryable以解决性能问题......我需要它来使用IQueryable。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

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

像这样:

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

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname)));

答案 1 :(得分:2)

大家好,谢谢我自己找到了解决方案:

books.Where(r => r.Authors.Any(x => x.lastname.Contains(searchAuthor)));

错误 - 我认为 - 我正在做一种“相反的工作”:我说的是“姓氏必须包含searchAuthor字符串”而不是反之名(姓氏必须包含SearchAuthor字符串..现在它给了我期待的结果。

有趣的是,我在初始问题中发布的完全相同的查询使用IEnumerable正常工作。