如何使用Entity Framework Query创建嵌套的JSON响应

时间:2013-03-12 08:28:51

标签: json entity-framework

我希望使用我的EF查询获得嵌套的JSON回复,但不确定如何执行此操作。 我已经宣布我的模型如下:

  [Serializable]
    public class StockReturnMethod
    {
        public int WarehouseID { get; set; }
        public int ProductSKUID { get; set; }
        public int LotID { get; set; }
        public string LotName { get; set; }
        public int AreaID { get; set; }
        public string AreaName { get; set; }
        public int BinID { get; set; }
        public string BinName { get; set; }
        public List<AvailibleStock> Stock { get; set; }
    }


  [Serializable]
    public class AvailibleStock
    {
        public int WarehouseID { get; set; }
        public int ProductSKUID { get; set; }
        public string ProductSKUName { get; set; }
        public string WarehouseName { get; set; }
        public string Status { get; set; }
        public int QtyUnassigned { get; set; }
    }

这是我到目前为止的EF查询。

    {
       return (from WH in SCMENT.Warehouses 
               join WL in SCMENT.WarehouseLots on WH.WarehouseID equals WL.WarehouseID
               join WA in SCMENT.WarehouseAreas on WL.WarehouseLotID equals WA.WarehouseLotID
               join WB in SCMENT.WarehouseBins on WA.WarehouseAreaID equals WB.WarehouseAreaID
               join SLI in SCMENT.StockLineItems on WH.WarehouseID equals SLI.WarehouseID
               join PSKU in SCMENT.ProductSKUs on SLI.ProductSKUID equals PSKU.ProductSKUID
               where SLI.SystemAreaID == 1

               select new StockReturnMethod() 
               {
                WarehouseID = WH.WarehouseID,
                LotID = WL.WarehouseLotID,
                LotName = WL.WarehouseLotName,
                AreaID = WA.WarehouseAreaID,
                AreaName = WA.WarehouseAreaName,
                BinID = WB.WarehouseBinID,
                BinName = WB.WarehouseBinName,
                ProductSKUID = PSKU.ProductSKUID,
                Stock = (Will I create a sub query here?)


               }

    )

1 个答案:

答案 0 :(得分:1)

public List<AvailibleStock> Stock { get; set; }

将其更改为:

public IList<AvailibleStock> Stock { get; set; }

编辑:以下是我可以用作参考的一个项目的工作示例:

public class StatisticsModel
{
    public int Id { get; set; }
    public int ClientId { get; set; }
    public int Opened { get; set; }
    public IEnumerable<LocationsModel> Locations { get; set; }
}


public class LocationModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int OpenCount { get; set; }
}


return dbSet.Select(x => new StatisticsModel
{
    Id = x.Id,
    ClientId = x.ClientId,
    Opened = x.OpenCount,
    Locations = x.Locations.Select(z => new LocationsModel{
        Id = z.Id,
        Name = z.Store.Name,
        OpenCount = z.OpenCount
    })
})