@maxus01
начинающий программист

Как объединить списки объектов, имеющие в своем составе словари?

Здравствуйте. Делаю парсер для определенного набора сайтов медицинской тематики.
На каждый сайт отправляется поисковый запрос с частью названия лекарства, напр "парац".
От каждого сайта получаю в результатах поиска список объектов с ценами - List и разными артиклями.
В классе PricedDrug определил словарь (строка-сайт, цена). Все лекарства сравнимы по артиклю.
На выходе программы хочу получить тот же List, но с заполненными словарями цен и сайтов.
Что из арсенала LINQ лучше использовать в данном случае?

Имеем класс
public class PricedDrug: IComparable<PricedDrug>
    {
        public PricedDrug()
        {
            _prices = new Dictionary<PriceSource, float>();
        }
        protected string _article;
        private Dictionary<PriceSource, float> _prices;
        public int CompareTo(PricedDrug other)
        {
            return _article.CompareTo(other.article);
        }
        //далее геттеры, сеттеры
    }

Далее делаем
foreach(site in sitelist)
{
    List<PricedDrug>  search_results =  site.Seach(text);
}

И получаем такую коллекцию:
{
{ _prices: { "site1", 100}, _article:"1"}
{ _prices: { "site2", 110}, _article:"1"}
{ _prices: { "site3", 10}, _article:"2"}
{ _prices: { "site2", 12}, _article:"2"}
}

Как одним запросом получить итоговую коллекцию вида:
{ _prices: [ { "site1", 100},{ "site2", 110} ], _article:"1"}
{ _prices: [ { "site2", 10}, { "site3", 12} ]_article:"2"}

Т.е свернуть по артиклю?
  • Вопрос задан
  • 198 просмотров
Решения вопроса 1
@dog_funtom
Фрилансер через Upwork
Например, так:
var finalResults =
			from srGroup in searchResults.GroupBy(sr => sr.article)
			let prices = srGroup.SelectMany(sr => sr.prices).ToDictionary(p => p.Key, p => p.Value)
			let article = srGroup.First().article
			select new PricedDrug { article = article, prices = prices };
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GroupBy
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы