LINQ使用一个大型数组过滤表

时间:2016-03-21 00:04:47

标签: c# linq

我有cars的桌子和树视图,因此用户可以选择多辆车并查看详细信息

问题是,如果用户选择了许多车辆,这一行会导致StackOverflow(不是意图打算)。

有1300辆汽车。在这种情况下,id[]有720个整数。 163 id的工作正常。

IEnumerable<car> cresult = db.cars.Where(c => id.Any(s => s == c.car_id)).ToList();
                                              ^^^
                                              int []

使用一个大型数组过滤我的表的最佳方法是什么?

错误:

enter image description here

1 个答案:

答案 0 :(得分:2)

您应该使用Contains而不是Any()并进行自己的比较。

IList<car> cresult = db.cars.Where(c => id.Contains(s => c.car_id)).ToList();

此外,在您明确完成将其转换为列表的工作后,投射到IEnumerable<car>可能不是一个好主意。

为了进一步提高性能,您可以考虑使用HashSet<int>而不是int[] - 尽管如此,如果将其转换为SQL查询,它可能不会有太多(如果有的话)获得。