【问题标题】:Linq - Ordering Json Products by Price DoubleLinq - 按价格双倍订购 Json 产品
【发布时间】:2020-07-19 16:01:34
【问题描述】:

我有这个产品表:

P_Id    P_Title P_JsonData  P_SC_Id
 168    fdsfdf  SomeJson    1

SomeJson 等于:

{
"pType": "1",
"pTitle": "son 1",
"pProds": [{
    "formM": 1,
    "sDesc": "<p>son 1</p>",
    "lDesc": "<p>son 1<br></p>",
    "pColor": "",
    "pSize": "XXS",
    "postage": "22",
    "quatity": 23,
    "aPrice": "23",
    "rPrice": "23",
    "Discounted": "23",
    "Price": "23",
    "p_Num": "71770005f28641118a617ba8ec070a44",
    "images": [{
        "mN": 1,
        "idImage": "image1",
        "fileName": "1724d443fe514050903176247d379e09.jpg",
        "bytes": "/img/ProdImages/71770005f28641118a617ba8ec070a44/1724d443fe514050903176247d379e09.jpg"
    }, {
        "mN": 1,
        "idImage": "image2",
        "fileName": "f70d2e941fd740c5bd72cb451c04b81b.jpg",
        "bytes": "/img/ProdImages/71770005f28641118a617ba8ec070a44/f70d2e941fd740c5bd72cb451c04b81b.jpg"
    }, {
        "mN": 1,
        "idImage": "image3",
        "fileName": "4c58e7b0406b48c89fcd5fabe151205a.jpg",
        "bytes": "/img/ProdImages/71770005f28641118a617ba8ec070a44/4c58e7b0406b48c89fcd5fabe151205a.jpg"
    }]
}, {
    "formM": 2,
    "sDesc": "<p>son 2</p>",
    "lDesc": "<p>son 2<br></p>",
    "pColor": "",
    "pSize": "XXS",
    "postage": "3",
    "quatity": 3,
    "aPrice": "3",
    "rPrice": "3",
    "Discounted": "3",
    "Price": "3",
    "p_Num": "7be125c9df94481a84bf1eff928fc2a3",
    "images": [{
        "mN": 2,
        "idImage": "image1",
        "fileName": "c117460b70194788b162d5445f01e151.jpg",
        "bytes": "/img/ProdImages/7be125c9df94481a84bf1eff928fc2a3/c117460b70194788b162d5445f01e151.jpg"
    }, {
        "mN": 2,
        "idImage": "image2",
        "fileName": "5a70893f7e5a401398344d4269f245ce.jpg",
        "bytes": "/img/ProdImages/7be125c9df94481a84bf1eff928fc2a3/5a70893f7e5a401398344d4269f245ce.jpg"
    }]
}, {
    "formM": 0,
    "sDesc": "",
    "lDesc": "",
    "pColor": "",
    "pSize": "0",
    "postage": "0",
    "quatity": 0,
    "aPrice": "0",
    "rPrice": "0",
    "Discounted": "0",
    "Price": "0",
    "p_Num": "1b7752c65d3747ed99562745b875b8da",
    "images": []
}, {
    "formM": 0,
    "sDesc": "",
    "lDesc": "",
    "pColor": "",
    "pSize": "0",
    "postage": "0",
    "quatity": 0,
    "aPrice": "0",
    "rPrice": "0",
    "Discounted": "0",
    "Price": "0",
    "p_Num": "5b817d94b3ec4471a26a0a47a15cc37c",
    "images": []
}]
}

此 SomeJson 表示产品表中每一行的产品,因此如果两个产品相同但按尺寸和颜色区分,则产品可以有多个产品,因此它们具有不同的价格但适合相同的产品。

现在 products 表中的每一行都会有这个 SomeJson,我需要做的是按价格订购 json,这样我就可以得到 SomeJson 的元素 0 中的最低值。

我想按价格降序订购,所以我从 SomeJson 元素 0 处获得最高价格。

我试过了:

从最低价到最高价

data = data.OrderBy(x => JsonConvert.DeserializeObject<MainProduct>(x.P_JsonData).pProds.Where(g => Convert.ToDouble(g.Price) > 0 && g.formM > 0).OrderBy(d => Convert.ToDouble(d.Price)).ElementAt(0).Price).ToList();

最高到最低价:

 data = data.OrderByDescending(x => JsonConvert.DeserializeObject<MainProduct>(x.P_JsonData).pProds.Where(g => Convert.ToDouble(g.Price) > 0 && g.formM > 0).OrderByDescending(d => d.Price).ElementAt(0).Price).ToList();

但没有运气

以下是构成此产品表和 json 的对象:

    public class MainProduct
    {
        public string pType;
        public string pTitle;
        public List<ProductJson> pProds;
        
    }

    public class ProductJson
    {
        public int formM;
        public string sDesc;
        public string lDesc;
        public string pColor;
        public string pSize;
        public string postage;
        public int quatity;
        public string aPrice;
        public string rPrice;
        public string Discounted;
        public string Price;
        public string p_Num;
        public List<ImageJson> images;

    }


    public class ImageJson
    {
        public int mN;
        public string idImage;
        public string fileName;
        public string bytes;
    }

那么我将如何实现从最低到最高和从最高到最低?

【问题讨论】:

  • 我不确定,但你能试着分成两行。我的意思是反序列化它首先存储在一个变量中。然后应用 OrderBy。它应该工作

标签: c# json linq oop


【解决方案1】:

您可以使用Json.Linq 轻松获得最大价格值,而无需将 JSON 反序列化为对象模型

var json = JObject.Parse(jsonString);
var maxValue = json["pProds"].Max(token => token["Price"]?.Value<double>());

然后你可以把它放到OrderBy声明中

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多