5

車、車、自転車の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();
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 に答える