尝试将数组连接到Linq-to-EF查询时出现以下错误
执行命令定义时发生错误。有关详细信息,请参阅内部异常SQL语句的某些部分嵌套得太深。重写查询或将其分解为较小的查询。
代码如下:
var vids = new List<string>();
using (var ctx = new MyDbContext())
{
var qry = ctx.Pickups.Where(p => p.UserName == User.Identity.Name);
if (someBoolean)
{
var v = GetVids(); // get the list of Ids from a web service
vids.AddRange(v);
}
if (vids.Count() > 0)
{
qry = qry.Join(vids, p => p.VId, v => v, (v, p) => p);
}
var data = qry
.Select(p => new
{
// etc.
});
}
问题是Web服务与我使用EF的数据库没有关联,否则,我只是对数据库中的表进行连接。我从网络服务中回来的Id的数量可能超过一百(通常是5-10)。如果我注释掉Join,代码工作正常,所以我知道错误在Join中。只有少数(最多约30个)视频中的ID,连接效果非常好。
您建议如何解决此问题?我唯一能想到的是将ID列表插入数据库并以这种方式进行连接。这对我来说似乎不太吸引人。
答案 0 :(得分:5)
尝试将if (vids.Count() > 0)
替换为:
if (vids.Count > 0)
{
qry = qry.Where(arg => vids.Contains(arg.VId));
}
仅当vids
小于2100个元素时才会有效,因为这会转换为IN (x, y, .., n)
条件。
如果您使用实体框架3.5,那么Contains
将无效。您可以在此处找到可能的解决方案:'Contains()' workaround using Linq to Entities?