Как сгруппировать данные из базы данных в dto?
Например, я хочу, чтобы мой вывод был таким:
{
id: "random-id-tst",
years: [
{
year: 1,
productIds: ['guid-id-1', 'guid-id-2'],
},
{
year: 2,
productIds: ['guid-id-3'],
}
]
}
Но я борюсь и пробовал много вещей и дошел до этого момента:
{
id: "random-id-tst",
years: [
{
year: 1,
productIds: ['guid-id-1'],
},
{
year: 1,
productIds: ['guid-id-2'],
},
{
year: 2,
productIds: ['guid-id-3'],
},
]
}
public class Order
{
public Guid ID{ get; set; }
public ICollection<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public Guid OrderID { get; set; }
public Order Order { get; set; }
public Guid ProductID { get; set; }
public Product Product { get; set; }
public int Year { get; set }
}
public class Product
{
public Guid ID { get; set; }
public ICollection<OrderLine> OrderLines { get; set; }
}
public class OrderDto
{
public Guid ID { get; set; }
public IEnumerable<YearsDto> Years { get; set; }
}
public class YearDto
{
public int Year { get; set; }
public ICollection<Guid> ProductIds { get; set; }
}
Я пробовал много вещей, но каждый раз получаю разные ошибки.
Вот что я сделал:
var orderLines = (await _context.OrderLine
.Where(s => s.orderID == orderId)
.ToListAsync()).GroupBy(ol => ol.Year);
var order = (await _context.Order
.Where(order => order.ID == orderId)
.Select(x =>
new OrderDto()
{
ID = order.ID,
Years = orderLines.Select(ss => new YearsDto()
{
Year = 1,
}),
}
).FirstAsync());
return order;
Как вы можете видеть, я жестко закодировал Year
и не включил productIds
, потому что по какой-то причине я не могу ссылаться на ss.Year
или ss.Product
, а также когда я запускаю это, это дает мне ошибку: InvalidOperationException: variable '__Select_1' of type 'System.Collections.Generic.IEnumerable`1[YearsDto]' referenced from scope '', but it is not defined
Может ли кто-нибудь указать мне в правильном направлении, как решить мою проблему?