ProviderCollection To Dictionary - PullRequest
       24

ProviderCollection To Dictionary

0 голосов
/ 15 августа 2011

Я реализовал шаблон провайдера и создал коллекцию провайдеров, которую я использую в своем проекте.Мне нужно выполнить поиск по свойству в списке поставщиков, которые у меня есть для определенного значения.Мне было интересно, есть ли способ преобразовать коллекцию провайдера в словарь элегантным способом?Со словарем я могу использовать поиск, чтобы сопоставить значение.Ищите словарь или, может быть, есть лучший способ справиться с подобным сценарием вместо выполнения базового цикла foreach.Все помогают и высоко ценятся.Ex.было бы полезно.

Спасибо, DND

Есть ли лучший, более чистый способ написать этот код поиска ???Я думал об использовании словаря, который Джон показал мне ниже.Как вы думаете?

var ProdNumVal = from p in xdoc.Root.Element("ClientOrderId").Elements()
                         where (string)p.Attribute("name") == "ProductNumber"
                         select (string)p.Value;


        if (!string.IsNullOrEmpty(ProdNumVal.ToString()))
        {
            foreach (XMLProviderBase prov in Providers)
            {
                products = prov.ProductNumber.Split(';');
                foreach (string prod in products)
                {
                    if (prod == ProdNumVal.FirstOrDefault())
                        return prov;
                }
            }
        }

1 Ответ

0 голосов
/ 15 августа 2011

Вы говорите о System.Configuration.Provider.ProviderCollection или это ваш собственный класс коллекции провайдеров?

В любом случае, ваша ProviderCollection является IEnumerable, вы можете использовать метод LINQ ToDictionary () для создания словаря:

        ProviderCollection pc = <initialize somehow>;
        Dictionary<string, string> d = pc
            .Cast<ProviderBase>()
            .ToDictionary(pb => pb.Name, pb => pb.Description);

Первый аргумент ToDictionary () выбирает ключ, 2-й аргумент выбирает значение. Здесь я просто беру имя / описание для примера (при условии, что ProviderBase является типом элемента), но вы можете выбрать любые нужные значения.

Надеюсь, это поможет,

John

...