This is my sql Query:
SELECT ParkingPlaceName, NoOfParkingPlaces, COUNT(Place.ParkingAreaID) AS NoOfCarsParked, NoOfParkingPlaces-COUNT(Place.ParkingAreaID)
FROM ParkingArea
LEFT JOIN Place ON ParkingArea.ParkingAreaID = Place.ParkingAreaID
LEFT JOIN Car ON Car.CarID = Place.CarID
GROUP BY ParkingPlaceName, NoOfParkingPlaces, Place.ParkingAreaID
how to write in LINQ to SQL Query
Asked
Active
Viewed 152 times
0

amar
- 7
- 1
- 4
-
the left join to `Car` is needed? – Riad May 16 '17 at 12:07
-
actually i am using LEFT OUTER JOIN – amar May 16 '17 at 14:54
-
`LEFT JOIN` and `LEFT OUTER JOIN` are the same https://stackoverflow.com/q/406294/125981 – Mark Schultheiss Feb 13 '18 at 19:48
1 Answers
0
I think you can use DefaultIfEmpty
method to perform left outer join between 3 tables with let
statements to deal with group results, hence the LINQ version from your SQL query should be similar (or same) like below:
var query = from pa in ParkingArea
from pl in Place.Where(x => pa.ParkingAreaID == x.ParkingAreaID).DefaultIfEmpty()
from ca in Car.Where(x => x.CarID == pl.CarID).DefaultIfEmpty()
group new { pa, pl.ParkingAreaID, ca.CarID } by new { pa.ParkingPlaceName, pa.NoOfParkingPlaces, pl.ParkingAreaID } into grp
let ParkingPlaceName = grp.Select(x => x.ParkingPlaceName)
let NoOfParkingPlaces = grp.Select(x => x.NoOfParkingPlaces)
let NoOfCarsParked = grp.Select(x => x.ParkingAreaID).Count()
select new
{
ParkingPlaceName,
NoOfParkingPlaces,
NoOfCarsParked,
AvailableParkingPlaces = NoOfParkingPlaces - NoOfCarsParked // new alias for holding substraction
};
I decided not to use join ... in ... on ... equals ...
directly after first and third from
clauses, since it may lead into confusion about which table instance should be handled when creating group elements after performing join
.

Tetsuya Yamamoto
- 24,297
- 8
- 39
- 61