首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ to SQL: IQueryable - string contains method不支持转换到SQL

LINQ to SQL: IQueryable - string contains method不支持转换到SQL
EN

Stack Overflow用户
提问于 2011-11-07 16:02:00
回答 2查看 7.2K关注 0票数 4

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

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

代码语言:javascript
运行
复制
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一起工作。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-08 16:20:26

嗨,伙计们,谢谢我自己找到了解决办法:

代码语言:javascript
运行
复制
books.Where(r => r.Authors.Any(x => x.lastname.Contains(searchAuthor)));

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

有趣的是,我在最初的问题中发布的同样的查询在使用IEnumerable时运行良好。

票数 2
EN

Stack Overflow用户

发布于 2011-11-07 16:23:53

这个特定的Contains重载不起作用,但是忽略StringComparison将使其转换为SQL,这将生成一个LIKE %SearchInput%。默认情况下,这将是不敏感的,除非您的DB被设置为大小写感知。

就像这样:

代码语言:javascript
运行
复制
string searchAuthor = "foo";
IQUeryable books = BookStaticRepository.SelectAll();

books.Where(r => r.Authors.Any(x => searchAuthor.Contains(x.lastname)));
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8039016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档