我有一个搜索表单,用户可以在其中搜索汽车零件,并且需要过滤它们是否为PartNumber字段提供了一个值:
var query = db.Car.Include(u => u.CarPart);
if (!string.IsNullOrWhiteSpace(model.PartNumber))
{
query = query.Where(u => u.CarPart.PartNumber == model.PartNumber);
}
但是给出了这个错误:
ICollection
有什么想法吗?
答案 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