5

鉴于我有三张桌子,车辆,汽车,自行车。Cars 和 Bikes 都有一个 VehicleID FK 链接回 Vehicles。

我想计算所有像这样的汽车。

Vehicles.Select(x=>x.Car).Count();

但是,这将为我提供所有车辆行,并将 null 放在车辆类型为 Bikes 的行中。
我正在使用 linqpad 来执行此操作并看到 sql 语句我意识到它这样做的原因是因为在 x.Car 连接上它在车辆和汽车之间执行了 LEFT OUTER JOIN,这意味着它将返回所有车辆。如果我将查询更改为仅使用 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();
4

1 回答 1

6

好吧,该Where子句似乎是合理的,或者您可以使用实际连接,假设您有 CarID 属性或类似的东西:

Vehicles.Join(Cars, v => v.CarID, c => c.ID, (v, c) => c.CountryID).Distinct()
于 2011-04-04T06:07:23.400 回答