从列表创建父子模型列表

时间:2019-01-03 06:03:36

标签: c# linq-to-sql

当我尝试从表中获取列表时,我想使其成为像父代孩子一样的模型列表。我尝试过的模型和示例代码无法给出期望的结果。

public class EPItemZonePriceGetDto
{
    public string ItemCode { get; set; }
    public List<EPZonePriceDto> ItemZonePrices { get; set; }

}
public class EPZonePriceDto
{
    public int ZoneId { get; set; }
    public string Price { get; set; }
}

从表数据列表中选择的内容包含以下给出的示例数据:

ZoneId  ItemCode    Price
1   000100  10
1   000633  10.5
2   000100  11
2   000633  8.8
3   000100  9
3   000633  9.5
4   000100  8.5
4   000633  9.5
IEnumerable<EPItemZonePriceGetDto> data = _entities.ItemZonePrices.Where(x 
=>x.ItemCode == itemcode).ToList().Select(s=> new EPItemZonePriceGetDto
        {
            ItemCode = s.ItemCode,
            ItemZonePrices = new List<EPZonePriceDto>()
            {
                new EPZonePriceDto()
                {
                    Price = s.Price.ToString(),
                    ZoneId = s.ZoneId
                }
            }
        }

我希望如下所示的结果

 { itemZonePrices :
     {
    itemCode:017273
    zonePrice:
    [
      { zoneId:1, price:”1.23” },
      { zoneId:2, price:”1.23” }

    ]
   }}

但这给了我

{itemZonePrices :
   {
    itemCode:017273
    zonePrice:
    [
      { zoneId:1, price:”1.23” }

    ]
   },
   itemZonePrices :
   {
    itemCode:017273
    zonePrice:
    [

      { zoneId:2, price:”1.23” }
    ]
   }
}

1 个答案:

答案 0 :(得分:0)

您需要将数据分组在ItemCode上,然后根据需要投影数据。

尝试如下操作:

var data = _entities.ItemZonePrices
                  .Where(x => x.ItemCode == itemcode).ToList()
                 .GroupBy(x => x.ItemCode)
                 .Select(s=> new EPItemZonePriceGetDto
                            {
                                ItemCode = s.Key,
                                ItemZonePrices = s.Select( x => 
                                                      new EPZonePriceDto()
                                                         {
                                                           Price = x.Price.ToString(),
                                                           ZoneId = x.ZoneId
                                                         })
                            });