【发布时间】:2020-05-16 11:26:01
【问题描述】:
如何在 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
有人可以为我指出如何解决我的问题的正确方向吗?
【问题讨论】:
标签: c# entity-framework data-transfer-objects