实体框架WebApi 2.0中的动态列表

时间:2017-03-07 18:39:04

标签: c# entity-framework list

我在EntityFrameWork中使用DTO的WebApi 2.0,所以我想检索Orders中的所有订单,OrderProducts是我程序中的一个列表,我想检索与该订单相关的所有OrderProducts我的代码现在是以下:

public async Task < IHttpActionResult > GetOrder() {
    var order = from x in db.Order
    select new OrderDTO {
        OrderId = x.OrderId,
        UserId = x.UserId,
        orderStatusCode = x.orderStatusCode,
        OrderProducts = new List < OrderProductDTO > {
            new OrderProductDTO {
                OrderId = x.OrderProducts.Select(y = >y.OrderId).FirstOrDefault(),
                OrderProductId = x.OrderProducts.Select(y = >y.OrderProductId).FirstOrDefault(),
                ProductId = x.OrderProducts.Select(y = >y.ProductId).FirstOrDefault(),
                Product = new ProductDTO() {
                    productDesc = x.OrderProducts.Select(y = >y.Product.productDesc).FirstOrDefault(),
                    ProductId = x.OrderProducts.Select(y = >y.Product.ProductId).FirstOrDefault(),
                    productName = x.OrderProducts.Select(y = >y.Product.productName).FirstOrDefault(),
                    productPrice = x.OrderProducts.Select(y = >y.Product.productPrice).FirstOrDefault(),
                }
            }
        },
        purchaseDate = x.purchaseDate,
        quantityOrder = x.quantityOrder,
        totalOrderPrice = x.totalOrderPrice,
        User = new UserDTO {
            UserId = x.UserId,
            username = x.User.username,
            userInfo = new UserInfoDTO {
                adress = x.User.UserInfo.adress,
                city = x.User.UserInfo.city,
                country = x.User.UserInfo.country,
                zip = x.User.UserInfo.zip
            }
        }
    };
    return Ok(order);

一切似乎都没问题,但是当我调用WebApi时,只返回第一个元素,而不是OrderProduct中的所有元素: Only returns first value

知道如何检索所有OrderProducts吗?谢谢。

2 个答案:

答案 0 :(得分:1)

嗯,您只在查询中填充单个项目。相反,你应该这样做:

....
OrderProducts = x.OrderProducts.Select(op => new OrderProductDTO
{
    OrderId = op.OrderId,
    OrderProductId = op.OrderProductId,
    //etc
}
....

答案 1 :(得分:0)

看起来你只需要一个产品而不是一个List

Product = new ProductDTO() {
                productDesc = x.OrderProducts.Select(y = >y.Product.productDesc).FirstOrDefault(),
                ProductId = x.OrderProducts.Select(y = >y.Product.ProductId).FirstOrDefault(),
                productName = x.OrderProducts.Select(y = >y.Product.productName).FirstOrDefault(),
                productPrice = x.OrderProducts.Select(y = >y.Product.productPrice).FirstOrDefault(),
            }

应该是

Products = new List<ProductDTO>() {...}