c# linq 生成的查询长度超过限制。有什么办法可以提高这个限制吗?

标签 c# sql linq entity-framework

您好,我正在构建 MVC 4 报告,并使用 EF5。数据库在 SQL 2005 上。

The report has a large amount of long string filters, when there are a lot of them selected, I got this error:"Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries ”

过滤器被选中并返回一个列表,在我使用的 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 真的很愚蠢……您正在浪费时间来产生更糟糕的解决方案。

关于c# linq 生成的查询长度超过限制。有什么办法可以提高这个限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933801/

相关文章:

c# - NHibernate查询问题

c# - 以用户身份运行我的程序

c# - 签名算法: itu-t?是什么意思

sql - 仅拉取 "-"左侧的文本

c# - 使用 lambda 从数组中选择每隔一个元素

c# - 即使哈希码相同,LINQ Distinct 也会重复计算?

c# - 解析看似没有分隔符的字符串

php - 在 mysql 中运行更新查询后返回更新后的值

sql - Oracle 中满足条件时重置运行总和

node.js - MongoDB : Update only those objects in a collection whose 'Id' exists in a list