在IQueryable上使用First()方法而不需要访问数据库

时间:2016-09-09 21:23:37

标签: c# entity-framework linq

我正在使用一些过滤器构建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();

1 个答案:

答案 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();