2011-03-31 18 views
0

Supose我有一個表「available_cars」[car_id,descritpion]和另一個表「cars_x_client」[client_id,car_id]。我如何查詢客戶沒有的所有汽車?我該如何在Linq中「查找非重合」查詢?

我知道在SQL中做它。也許這是一塊蛋糕,但我不知道如何在Linq中做到這一點。

回答

1

爲了有效地做到這一點,你可以使用一個連接 - 這將轉換爲內連接在SQL:

var query = from available in available_cars 
    join client_car in cars_x_client on available.car_id equals client_car.car_id 
    where client_car.client_id != my_client_id 
    select car; 

也有可供外部聯接機制 - 例如如果有一輛車不屬於任何客戶端,然後使用類似:

var query = from available in available_cars 
    join client_car in cars_x_client on available.car_id equals client_car.car_id into outer_join 
    from outer in outer_join.DefaultIfEmpty 
    where (outer == null || outer.client_id != my_client_id) 
    select car; 

更多關於LINQ包括聯接我推薦101個LINQ示例 - http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

+0

我用了「除」方法來檢索兩個數據集之間的差異。 – Alex 2011-04-01 12:43:25

1

試試這個。

from car in available_cars 
where !cars_x_client.Any(x => x.client_id == client_id 
         && x.car_id == car.car_id) 
select car;