Ed *_*nek 4 c# linq sql-server linq-to-entities entity-framework
尝试将数组连接到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.
});
}
Run Code Online (Sandbox Code Playgroud)
问题是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));
}
Run Code Online (Sandbox Code Playgroud)
仅当vids
少于2100个元素时才会起作用,因为这将转换为IN (x, y, .., n)
条件.
如果您使用实体框架3.5,那么Contains
将无法正常工作.你可以在这里找到可能的解决方案:使用Linq to Entities的'Contains()'解决方法?
归档时间: |
|
查看次数: |
2833 次 |
最近记录: |