实体框架,Linq,“SQL语句的某些部分嵌套太深。重写查询或将其分解为较小的查询。”

时间:2018-05-01 09:44:46

标签: c# linq entity

我有以下代码:

        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等做到这一点?

1 个答案:

答案 0 :(得分:1)

我非常确定如果用数组替换列表并使用以下内容,您将得到更好的答案:

var branches = Context.HierarchyBranches.Where(x => dataItemIds.Contains(x.DataItemID));

在Linq to SQL&#39;包含&#39;成为&#39; IN&#39;陈述,而“任何&#39;需要预定义并且可以创建内部SQL语句。