Entity framework、Linq、"Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries."
Entity framework, Linq, "Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries."
我有以下代码:
var branches =Context.HierarchyBranches.Where(x => dataItemIds.Any(y => y == x.DataItemID));
return await branches.ToListAsync();
和List<int> dataItemIds
并生成以下异常:
Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.
当 dataItemIds 数组大于大约 80 个项目时,但当列表中的项目较少时工作正常。
很明显,问题与 dataItemIds 列表的大小有关
我的问题是,我还能如何编写此查询?
我知道我可以使用存储过程等,但是有没有办法使用 Linq、Entity 等来做到这一点?
我敢肯定,如果您将列表替换为数组并使用以下内容,您会得到更好的答案:
var branches = Context.HierarchyBranches.Where(x => dataItemIds.Contains(x.DataItemID));
在 Linq to SQL 中,'Contains' 变成了 'IN' 语句,而 'Any' 需要一个前缀并且可以创建内部 SQL 语句。
我有以下代码:
var branches =Context.HierarchyBranches.Where(x => dataItemIds.Any(y => y == x.DataItemID));
return await branches.ToListAsync();
和List<int> dataItemIds
并生成以下异常:
Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.
当 dataItemIds 数组大于大约 80 个项目时,但当列表中的项目较少时工作正常。
很明显,问题与 dataItemIds 列表的大小有关
我的问题是,我还能如何编写此查询?
我知道我可以使用存储过程等,但是有没有办法使用 Linq、Entity 等来做到这一点?
我敢肯定,如果您将列表替换为数组并使用以下内容,您会得到更好的答案:
var branches = Context.HierarchyBranches.Where(x => dataItemIds.Contains(x.DataItemID));
在 Linq to SQL 中,'Contains' 变成了 'IN' 语句,而 'Any' 需要一个前缀并且可以创建内部 SQL 语句。