我在查询一组使用LINQ和Lambda表达式的相关实体时非常困难。
我有四个相关的实体......
车辆 1:n VehicleTypes n:1 价格 1:n CustomerTypes
我正在尝试获取给定Vehicle和CustomerType的价格列表。例如,我想获得福特野马(VehicleTypeId = 2)的所有价格。在那些价格中,我想包括价格所属的CustomerType(政府,商业,零售)。
我以为我可能会做以下事情......
Prices.Include(p => p.VehicleTypes)
.Include(p => p.CustomerTypes)
.Where(p => p.VehicleTypes.Vehicles.Select(v => v.Id == 2)
但是我收到了这个错误......
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<bool>' to 'bool'
我似乎无法创建Where条件,我可以过滤要购买的车辆的ID,但也在结果中包含CustomerType。
编辑:只是想注意我已添加using System.Data.Entity
,因此我可以访问类型安全包含扩展程序
答案 0 :(得分:2)
如果您需要此类车辆的价格和特定客户类型,您可以按以下步骤进行过滤:
var prices= Prices.Include(p => p.VehicleTypes)
.Include(p => p.CustomerTypes)
.Where(p => p.VehicleTypes.Vehicles.Any(v => v.Id == 2)// With this condition you make sure that Mustang belong to this set of vehicles
&& p.CustomerTypes.Type=="Commercial");
但是如果你想过滤结果中的车辆,你需要将你的查询投射到匿名类型或DTO:
var query= Prices.Include(p => p.VehicleTypes)
.Include(p => p.CustomerTypes)
.Where(p => p.VehicleTypes.Vehicles.Any(v => v.Id == 2)
&& p.CustomerTypes.Type=="Commercial")
.Select(p=>new {CustomerType=p.CustomerTypes.Type,
Vehicles=p.VehicleTypes.Vehicles.Where(v => v.Id == 2)});