車、車、自転車の3つのテーブルがあるとします。CarsとBikesの両方に、VehiclesにリンクするVehicleIDFKがあります。
このような車であるすべての車を数えたいです。
Vehicles.Select(x=>x.Car).Count();
ただし、これにより、車両のすべての行が表示され、車両タイプが自転車である行はnullになります。
私はこれを行うために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();