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;}
}

上記のjson pbjkectのように、ストアドプロシージャまたはlinqクエリを作成する方法を教えてください...

これは、データをモデルにバインドしようとしている方法です

       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、目的の JSON 構造を実現するために、それを匿名オブジェクトに射影して JsonResult に渡すことができます。

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 に答える