Я хочу получить все предложения, которые имеют данный тег.
У меня есть 3 модели Предложение:
public class OfferPlace : BaseModel
{
public string Title { get; set; }
public string Description { get; set; }
public decimal CostPerHour { get; set; }
public DateTime CreationDate { get; set; }
public DateTime OfferValidity { get; set; }
[Write(false)]
public virtual ICollection<OfferPlaceTag> OffersTags { get; } = new List<OfferPlaceTag>();
}
Тег:
public class Tag : BaseModel
{
public string TagName { get; set; }
[Write(false)]
public virtual ICollection<OfferPlaceTag> OffersTags { get; } = new List<OfferPlaceTag>();
}
и OfferPlaceTag:
public class OfferPlaceTag : BaseModel
{
public int OfferPlaceId { get; set; }
[Write(false)]
public virtual OfferPlace OfferPlace { get; set; }
public int TagId { get; set; }
[Write(false)]
public virtual Tag Tag { get; set; }
}
В BaseModel у меня есть Id и свойство IsActive.
В OfferPlaceRepository я создал этот метод:
public async Task<IEnumerable<OfferPlace>> GetAllOffersWithTag(string tagName)
{
var sql = $"SELECT * FROM {TableName<OfferPlace>()} AS O" +
$" INNER JOIN {TableName<OfferPlaceTag>()} AS OT ON O.Id = OT.OfferPlaceId" +
$" INNER JOIN {TableName<Tag>()} AS T ON T.Id = OT.TagId" +
$" WHERE O.IsActive = 'True' AND T.TagName = @tag";
return await Execute(conn =>
{
return conn.Query<OfferPlace>(
sql,
new { tag = tagName });
});
}
В Execute
я создаю соединение SQL. Таким образом, этот метод возвращает правильное количество объектов, но все они имеют идентификатор первого объекта. Как я могу вернуть нужные объекты?