使用LINQ解析JSON数据
本文关键字:数据 JSON 解析 LINQ 使用 | 更新日期: 2023-09-27 18:27:29
所以,我有一些数据,如下所示:
[
{
"Name": "Jonh ",
"Order": [
{
"Product": {
"Id": 8
},
"Quantity": 1
},
{
"Product": {
"Id": 19
},
"Quantity": 8
}
]
},
{
"Name": "Jane Doe 1",
"Order": [
{
"Product": {
"Id": 26
},
"Quantity": 7
},
{
"Product": {
"Id": 44
},
"Quantity": 2
},
{
"Product": {
"Id": 21
},
"Quantity": 6
},
{
"Product": {
"Id": 48
},
"Quantity": 2
},
{
"Product": {
"Id": 35
},
"Quantity": 2
},
{
"Product": {
"Id": 43
},
"Quantity": 1
}
]
}
]
UPDATE:JSON已经使用NewtonSoft.JSON.JsonConvert进行了解析
我对Linq完全陌生,我能够在JavaScript中做到这一点。我需要一个linq查询,提取最畅销的人订购的已售出产品
所以:它聚合了每一种产品,并将售出的数量相加,然后将订单的数量相加。
这就是我现在拥有的:
var products = clientSales.SelectMany(m => m.Order).Select(f=>f.Product.Id).Distinct();
这给了我一个不同产品ID的列表。。。
你几乎是对的,首先你应该在Order中使用SelectMany,然后在Quantity中使用OrderByDescending,最后选择以获得产品id,就像下面的代码一样:
var products = clientSales.SelectMany(m => m.Order)
.OrderByDescending(x => x.Quantity)
.Select(p => p.Product.Id)
.Distinct();
输出:
19
26
21
44
48
35
8
43
你可以在这里看到它的工作原理:https://dotnetfiddle.net/6sb3VY
假设您有以下类:
public class Customer
{
public string Name { get; set; }
public List<Item> Order { get; set; }
}
public class Item
{
public Product Product { get; set; }
public int Quantity { get; set; }
}
public class Product
{
public int Id { get; set; }
}
您可以生成一个产品ID和销售数量的列表,按数量降序排列,如下所示:
string json = "[{'"Name'": '"Jonh '",'"Order'": [{'"Product'": {'"Id'": 8},'"Quantity'": 1},{'"Product'": {'"Id'": 19},'"Quantity'": 8}]},{'"Name'": '"Jane Doe 1'",'"Order'": [{'"Product'": {'"Id'": 26},'"Quantity'": 7},{'"Product'": {'"Id'": 44},'"Quantity'": 2},{'"Product'": {'"Id'": 21},'"Quantity'": 6},{'"Product'": {'"Id'": 48},'"Quantity'": 2},{'"Product'": {'"Id'": 35},'"Quantity'": 2},{'"Product'": {'"Id'": 43},'"Quantity'": 1}]}]";
var deserializedObject = JsonConvert.DeserializeObject<List<Customer>>(json);
var groupedProducts = from product in deserializedObject.SelectMany(c => c.Order)
group product by product.Product.Id into grpProduct
select new
{
ProductId = grpProduct.Key,
Quantity = grpProduct.ToList().Sum(p => p.Quantity)
};
// Produces the ordered list of product IDs and quantity sold sorted by quantity descending
var orderedProducts = groupedProducts.OrderByDescending(p => p.Quantity).ToList();
这将最终根据您的输入生成以下匿名对象列表:
Product ID Quantity
19 8
26 7
21 6
44 2
48 2
35 2
8 1
43 1