#linq
#linq
Вопрос:
У меня есть два объекта, извлеченных из двух отдельных файлов JSON. Один является источником, другой — ссылкой для поиска конкретных данных из источника.
Исходный JSON:
{
"options": [
{
"id": 1,
"product_id": 1,
"size": "S",
"color": "red"
},
{
"id": 2,
"product_id": 1,
"size": "M",
"color": "red"
},
{
"id": 3,
"product_id": 1,
"size": "L",
"color": "red"
},
{
"id": 4,
"product_id": 1,
"size": "XL",
"color": "red"
},
{
"id": 5,
"product_id": 1,
"size": "S",
"color": "blue"
},
{
"id": 6,
"product_id": 1,
"size": "M",
"color": "blue"
},
{
"id": 7,
"product_id": 1,
"size": "L",
"color": "blue"
},
{
"id": 8,
"product_id": 1,
"size": "XL",
"color": "blue"
}
]
}
Поиск в формате JSON:
{
"product": {
"styles": [
{
"color": "red",
"options": [1,2,3,4]
},
{
"color": "blue",
"options": [5,6,7,8]
}
]
}
}
Оба десериализованы для моделей C #.
Мне нужно получить список различных размеров по всем параметрам, поэтому я запрашиваю следующим образом:
var sizes = (from o in options
from s in product.styles
from ss in s.optionIds
where ss == o.id
select new Size
{
name = v.size,
optionIds = // needs to be an array with all option ids
}
).ToList().GroupBy(ps => ps.name).Select(ps => ps.First()).ToList();
Раздел from / where работает должным образом, и я получаю список или различные размеры, однако мне также нужно перечислить все идентификаторы параметров в новом объекте Size…смотрите комментарий в коде.
Результирующий массив, который я ожидаю:
[
{
"name": "S",
"optionIds": [1,5]
},
{
"name": "M",
"optionIds": [2,6]
},
{
"name": "L",
"optionIds": [3,7]
},
{
"name": "XL",
"optionIds": [4,8]
}
]
Ответ №1:
Насколько я могу судить, ваш «lookup JSON» не содержит никакой информации, которая еще не найдена в источнике, поэтому нет смысла мутить воду с этими данными.
var sizes = options
.GroupBy(o => o.size, o => o.id)
.Select(g => new Size {name = g.Key, options = g.ToList()})
.ToList()
Комментарии:
1. Не совсем. Это упрощенные примеры, чтобы сосредоточиться на типе соединения, которое мне нужно выполнить, в источнике есть другие данные, которые извлекаются на основе идентификатора параметра в источнике. Извините, я, вероятно, должен был уточнить это. В конечном счете, исходный JSON является источником достоверности для идентификаторов параметров и всех связанных данных, поэтому существует поисковый файл JSON, чтобы определить, что извлекать из источника.
2. @Scott: Можете ли вы обновить свой вопрос, чтобы отобразить данные в ожидаемом массиве результатов, которые должны поступать из JSON поиска?