0

大家好,我有一个数据库,其中有一些名为

 [Options],[ProductAttributes],[Products],[ProductSKU],[ProductSKUOptionMappings]

我已将此作为实体模型添加到我的项目中,现在我想为此编写一个 linq 查询,我可以从上面指定的表中获取这些列

基于这个存储过程

  ALTER procedure [dbo].[GetProductDetail]
   (
     @ProductID bigint
   )
   as
   begin
   Select P.ProductName,  P.ProductDescription, PA.SKU, PA.OptionId,O.OptionName,  PA.Value, PS.ImageURL from ProductSKU PS 
   INNER JOIN ProductAttributes PA ON PS.SKU = PA.SKU 
   INNER JOIN Products P ON P.ProductId = PS.ProductId
   INNER JOIN Options O ON O.OptionsId = PA.OptionId 
   WHERE PS.ProductId = @ProductID
   end

我想将此查询转换为 linq 查询或将其用作 Storedprocedure 来获取我所需的 Json 对象

我的存储过程的输出看起来像这样

   ProductName                     ProductDescription        SKU    OptionId    OptionName  Value   ImageURL 
Tactical Long Sleeve Shirts     Hemline side slits        Shirt_1001  1          Color      Grey    C:\Users\Administrator\Desktop\Images\LongSleeveShirt.jpg
 Tactical Long Sleeve Shirts    Hemline side slits            Shirt_1001  2      Size        S          C:\Users\Administrator\Desktop\Images\LongSleeveShirt.jpg
 Tactical Long Sleeve Shirts    Hemline side slits            Shirt_1001  3       Fit     Regular   C:\Users\Administrator\Desktop\Images\LongSleeveShirt.jpg

每个产品可能有不同的 SKU,像上面这样,所以任何人都可以在这里帮助我如何构建我的 json 对象,看起来像这样

  i want my json object to be in this format

     var productdetails={
"productId": "1",
"productname": "Casualshirts",
"productSkus": [
    {
        "Skuimage": "URL",
        "SKU": [
            {
                "ProducSKU": "Shoe1001",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Black"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1002",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Black"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            },
            {
                "ProducSKU": "Shoe1003",
                "Options": [
                    {
                        "productOptions": [
                            {
                                "OptionID": "1",
                                "optionname": "Color",
                                "value": "Black"
                            },
                            {
                                "OptionID": "2",
                                "optionname": "Size",
                                "value": "S"
                            },
                            {
                                "OptionID": "3",
                                "optionname": "Fit",
                                "value": "Regular"
                            }
                        ]
                    }
                ]
            }
        ]

这是我的模型课

      public class ProductItems
{
    public long ProductID { get; set; }
    public string ProductName { get; set; }
    public string ImageURL { get; set; }
    public List<productSKU> SKUs { get; set; }
}

public class productSKU
{
    public string productsku { get; set;}
    public string SKUImageURL { get; set;}
    public List<options> oPTIONS { get; set; }
}

public class options
{
    public long OptionID { get; set; }
    public string OptionName { get; set;}
    public string OptionValue { get; set;}
}

任何人都可以帮助我如何构建我的存储过程或 linq 查询如上 json pbjkect 在此先感谢...

这就是我试图将我的数据绑定到我的模型的方式

       public IEnumerable<ProductItems> ProductDeatils(long ProductID)
    {
        var productdeatils = products.ExecuteStoreQuery<ProductItems>("GetProductDetail @ProductID ", new SqlParameter("@ProductID", ProductID));
        var data=new List<ProductItems>();
        foreach (var prod in productdeatils)
        {
            ProductItems items = new ProductItems();
            items.ProductID = prod.ProductID;
            items.ProductName = prod.ProductName;
            items.SKUs
        }

        return data;
    }

我被我的类中的属性数量和我从我的程序中检索的数据库列的数量困住了我如何将它们映射到我的模型

4

1 回答 1

0

假设您已从数据层检索模型的实例,您ProductItems可以将其投影到匿名对象中以传递给 JsonResult 以获得所需的 JSON 结构:

public ActionResult SomeAction()
{
    ProductItems model = ... retrieve the model from your data layer

    var result = new
    {
        productId = model.ProductID,
        productname = model.ProductName,
        productSkus = model.SKUs.Select(sku => new
        {
            Skuimage = sku.SKUImageURL,
            SKU = new[]
            {
                new 
                {
                    ProducSKU = sku.productsku,
                    Options = new[]
                    {
                        new
                        {
                            productOptions = sku.oPTIONS.Select(opt => new
                            {
                                OptionID = opt.OptionID,
                                optionname = opt.OptionName,
                                value = opt.OptionValue
                            })
                        }
                    }
                }
            }
        })
    };

    return Json(result, JsonRequestBehavior.AllowGet);
}
于 2012-10-04T13:34:38.690 回答