我正在使用一些过滤器构建IQueryable查询表达式。在给定的时刻,我想检查表达式是否有行并依赖于结果来进行另一个查询。在下面的示例中,Any
导致数据库命中,因此我最终在数据库上有3次点击。
有没有办法重新使用Any
功能而不会在时间之前点击数据库(类似Where()
并且具有所有好处)。
IQueryable<Car> visibleCars = context.Cars.Where(c => c.Status == "V");
IQueryable<Car> invisibleCars = context.Cars.Where(c => c.Status == "I");
IQueryable<Car> c = visibleCars.Any() && invisibleCars.Any()
? context.Cars.Where(c => c.Status == "x").ToList();
答案 0 :(得分:0)
在这种情况下,您应该能够通过将其他查询作为public Mat bufferedImageToMat(BufferedImage bi) {
OpenCVFrameConverter.ToMat cv = new OpenCVFrameConverter.ToMat();
return cv.convertToMat(new Java2DFrameConverter().convert(bi));
}
子句的一部分来获得不会产生任何结果的查询。
where
作为一种更通用的方法,您通常可以使用GroupBy的技巧在一次往返中执行多项检查:
IQueryable<Car> c = context.Cars
.Where(c => c.Status == "x"
&& visibleCars.Any()
&& invisibleCars.Any())
.ToList();