Subconsultas en dapper que ya no funcionan

c# dapper

Pregunta

Estoy usando dapper, acabo de implementar la función splitOn para obtener un objeto de ubicación establecido en AdListingSearchResult, pero al hacerlo, mis subconsultas (MainPhotoFileName y TotalPhotos) ahora son nulas y 0 respectivamente. ¿Alguna idea de lo que estoy haciendo mal aquí?

var data = GetConnection().Query<AdListingSearchResult, AdListingLocationSearchResult, AdListingSearchResult>(@"
SELECT TOP 10 a.AdListingID, a.Title, a.Details, a.CreateDateTime, l.LocationID, l.CountryID, l.USCity, l.USStateCode, l.IntlRegion, c.CountryName,  
(SELECT TOP 1 ap.Filename FROM tbAdListingPhotos ap WHERE ap.AdListingID = a.AdListingID) AS MainPhotoFileName, 
(SELECT COUNT (*) FROM tbAdListingPhotos ap WHERE ap.AdListingID = a.AdListingID) AS TotalPhotos
FROM tbAdListing a 
INNER JOIN tbLocation l ON (a.LocationID = l.LocationID) 
INNER JOIN tbEnumCountry c ON (l.CountryID = c.CountryID) 
WHERE a.Deleted = 0  ORDER BY a.CreateDateTime DESC                 
", (a, l) =>
 {
     a.Location = l;
     return a;
 },
 splitOn: "LocationId"
 ).AsQueryable();

return data;

Respuesta aceptada

Supongo que estas AdListingSearchResult asignan a las propiedades en el objeto AdListingSearchResult . Sin embargo, la fila se divide horizontalmente de acuerdo con el parámetro splitOn , lo que significa que AdListingSearchResult nunca ve esos valores.

Debería poder reordenar el SQL:

SELECT TOP 10 a.AdListingID, a.Title, a.Details, a.CreateDateTime,
(SELECT TOP 1 ap.Filename FROM tbAdListingPhotos ap WHERE ap.AdListingID = a.AdListingID) AS MainPhotoFileName, 
(SELECT COUNT (*) FROM tbAdListingPhotos ap WHERE ap.AdListingID = a.AdListingID) AS TotalPhotos,
l.LocationID, l.CountryID, l.USCity, l.USStateCode, l.IntlRegion, c.CountryName
FROM tbAdListing a
...


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué