Les sous-requêtes dans Dapper ne fonctionnent plus

c# dapper

Question

J'utilise dapper, j'ai juste implémenté la fonction splitOn pour obtenir un objet location défini dans mon AdListingSearchResult, mais mes sous-requêtes (MainPhotoFileName et TotalPhotos) sont maintenant nulles et nulles. Une idée de ce que je fais mal ici?

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;

Réponse acceptée

Je suppose que ces sous-requêtes sont destinées à mapper les propriétés de l'objet AdListingSearchResult . Cependant, la ligne est partitionnée horizontalement en fonction du paramètre splitOn , ce qui signifie que AdListingSearchResult ne voit jamais ces valeurs.

Vous devriez pouvoir ré-ordonner simplement le 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
...



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi