2013-07-24 121 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) –