一个make .include如何与分段查询一起使用?

时间:2018-08-01 21:26:00

标签: linq linq-to-sql

我有一个搜索表单,用户可以在其中搜索汽车零件,并且需要过滤它们是否为PartNumber字段提供了一个值:

var query = db.Car.Include(u => u.CarPart);

if (!string.IsNullOrWhiteSpace(model.PartNumber))
{
   query = query.Where(u => u.CarPart.PartNumber == model.PartNumber);
}

但是给出了这个错误:

ICollection 不包含'PartNumber'的定义,找不到可以接受类型为'ICollection '的第一个参数的扩展方法'PartNumber'。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

显然,您有一个类Car,其中每个Car都具有类型PartNumber的属性ICollection<CarPart>。可能是一对多或多对多的关系。
我不确定,但是我认为每个CarPart都有一个属性PartNumber

如果您编写了类型声明而不是使用var并为变量使用了适当的标识符,那么您会看到类似以下内容的东西:

IQueryable<Car> cars= db.Cars.Include(car => car.CarParts);
if (...)
{
    cars = cars.Where(car => car.CarParts...
}

现在,CarParts是什么样的东西?它是ICollection<CarPart>。当然,您不会期望集合具有PartNumber属性吗?

如果model.PartNumber具有非空值,我不确定要买哪辆车。

我希望具有至少一部分具有此PartNumber的汽车

cars = cars.Where(car => car.CarParts
    .Where(carPart => carPart.PartNumber == model.PartNumber
    .Any()

用词:给我所有Cars,以及他们所有的CarParts,在其CarPart的集合中至少有一个CarParts,其中有一个{{1} }等于PartNumber