嗨,我正在构建一个MVC 4报告,并使用EF5.数据库在SQL 2005上.
该报告有大量长字符串过滤器,当选择了很多字符串过滤器时,我收到了这样的错误:“SQL语句的某些部分嵌套太深.重写查询或将其分解为较小的查询.”
选择过滤器并返回List,在LINQ查询中我使用:
DataContext.Entity.Where(list.Contains(column));
return IQueryable<Entity>;
我想这是LINQ生成的SQL查询超过了限制,我不知道限制是什么.
我们有什么方法可以控制这个限制吗?或者请指出我的猜测是否错误.
非常感谢.
感谢@AdrianFaciu提供的以下链接,这真的很有帮助,我认为这是类似的问题. (我猜我的每个字符串过滤器的长度太长了,而且它们中有很多.)
Hitting the 2100 parameter limit (SQL Server) when using Contains()
我已经阅读了一些解决方法,但仍在寻找合适的解决方案,而不是通过生成字符串查询.至少目前看来,我必须逐步加载数据以减少查询的长度.
最佳答案 正确的解决方案是直接使用SQL. EF和Linq不是编写报表查询的工具.它是ORM – 您使用它来从数据库中获取对象,也可以修改它们并将它们存储回数据库.
如果您需要复杂的查询只是为了从数据库中提取数据来构建报告或某个复杂的搜索引擎,您应该简单地传递ORM的复杂性并转到低级SQL – 如果您达到了查询或参数的大小限制,那么您真的需要它.它将使您的查询更简单,更小,更快,并允许您使用一些高级功能,如表值参数,以避免大包含调用.
将所有报告从SProcs更改为Linq真的很愚蠢…你浪费时间制作更糟糕的解决方案.