为什么对于此linq SQL查询我的错误嵌套太深?

时间:2018-09-05 21:56:03

标签: c# linq c#-3.0

// Note serialNumbers is a List<string 
var ids = (from i in DB.InventoryItems
           join s in serialNumbers on i.SerialNumber equals s
           select i.id);
return string.Join(",", ids);

serialNumbers变量是字符串类型的列表。 serialNumbers列表中包含大约100个项目后,我得到了错误提示

1 个答案:

答案 0 :(得分:0)

如果serialNumbers是本地列表,那么如果DB.InventoryItems是可查询的数据库表,则无论如何都行不通。您不能将数据库表与本地集合连接在一起。你不应该那样写。

您应将其编写为:

var ids =
    from i in DB.InventoryItems
    where serialNumbers.Contains(i.SerialNumber)
    select i.id;

如果随后出现有关太多项目的错误,则这是数据库的局限性,因此,如果要使用该数字列表,则必须将该查询分成较小的部分。否则,您将不得不承担传统的foreach循环中本地过滤或强制转换为IEnumerable的开销。