Domanda

I have 2 tables: 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

I want to make a query that shows me all users (with or without a car) and their cars. I'm using LINQ to DataSet.

My query is:

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")
                        };

This query is correct, but only shows users who have car: on user.Field<string>("ID") equals car.Field<string>("ID")

Someone can help me. Thank you.

È stato utile?

Soluzione

This is because you are applying EquiJoin. You need 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")
                    };

Please ignore Typo mistakes. I am not on my laptop.I hope you got an idea

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top