2013-07-24 215 views
1

我有2個表:用戶 - 汽車:LINQ查詢。兩個表

**User table: ID - Name** 
ID:1 Name:Iam 
ID:2 Name:Louis 

**Car table: ID - Car** 
ID:2 Car:BMW 
ID:2 Car:Ford 
ID:2 Car:Strange 

我想打一個查詢,顯示我的所有用戶(含或不含汽車)和他們的汽車。我正在使用LINQ to DataSet。

我的查詢是:

var query = 
         from user in ObjDT_Usuario.AsEnumerable() 
         join car in ObjDT_Vehiculos.AsEnumerable() 
         on user.Field<string>("ID") equals car.Field<string>("ID") 
         orderby user.Field<string>(campo) 
         select new UserReport 
         { 
          Name = user.Field<string>("Name"), 
          Car = car.Field<string>("Car") 
         }; 

該查詢是正確的,但只顯示誰擁有汽車的用戶:on user.Field<string>("ID") equals car.Field<string>("ID")

有人能幫助我。謝謝。

+0

看看是否有幫助:http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx –

回答

2

這是因爲您正在申請EquiJoin。您需要LeftJoin

from user in ObjDT_Usuario.AsEnumerable() 
        join car in ObjDT_Vehiculos.AsEnumerable() 
        on user.Field<string>("ID") equals car.Field<string>("ID") into userxs 
        from u in userxs.DefaultIfEmpty(
        orderby u .Field<string>(campo) 
        select new UserReport 
        { 
         Name = user.Field<string>("Name"), 
         Car = u.Field<string>("Car") 
        }; 

請忽略錯字錯誤。我不在我的筆記本電腦上。我希望你有一個想法

+0

這是一個評論,而不是一個解決方案。 –

+0

是的抱歉,我確定按鈕按下。我更新了答案 – ethicallogics

+0

非常感謝您的幫助。 只有:「order by u.Field (campo)返回空例外 - > order by usuario.Field (campo)and Car = u!= null?u.Field (」Car「):default(string) –