繁体   English   中英

将数组连接到EF查询

[英]Join array to EF query

尝试将数组连接到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,连接工作完美。

您建议如何解决此问题? 我唯一能想到的是将ID列表插入数据库并以这种方式进行连接。 这对我来说似乎不太吸引人。

尝试将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将不起作用。 你可以在这里找到可能的解决方案: 使用Linq to Entities的'Contains()'解决方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM