假设我有三个表,分别为Vehicles、Cars和Bikes。Cars和Bikes都有一个VehicleID外键,用于连接到Vehicles表。
我想要像这样计算所有车辆中的汽车数量。
Vehicles.Select(x=>x.Car).Count();
然而,这将给我所有车辆的行,并在车辆类型为自行车的行中放置null。
我正在使用linqpad进行此操作,并查看sql语句后,我意识到它这样做的原因是因为在x.Car join上它执行了一个LEFT OUTER JOIN,vehicle和car之间的,这意味着它将返回所有车辆。 如果我更改查询以仅使用JOIN,则它将按预期工作。
有没有办法告诉linq使用这种语法进行联接? 最终,我想做一些像:
Vehicles.Select(x=>x.Car.CountryID).Distinct().Dump();
但是由于这个错误:
InvalidOperationException: The null value cannot be assigned to a member with type System.Int32 which is a non-nullable value type.
我最终做了这个:
Vehicles.Where(x=>x.Car!=null).Select(x=>x.Car.CountryID).Distinct().Dump();
Car
属性是可空的...因为车辆并不总是与汽车相关联。所以在你的表中,CarID
可能是一个可空字段。 - Jon Skeet