亲爱的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。
感谢您的帮助。
答案 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正常工作。