LINQ查询。两张桌子

时间:2013-07-24 17:38:31

标签: linq linq-to-dataset

我有2个表:user - car:

**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")

有人可以帮助我。谢谢。

1 个答案:

答案 0 :(得分: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")
                    };

请忽略错字错误。我不在我的笔记本电脑上。我希望你有个主意