2009-10-21 5 views
1

Я пишу класс для сохранения запросов на моем сайте. Я хочу иметь в классе «Массив» всех параметров, которые были указаны. Я попробовал NameValueCollection, но проблема, с которой я столкнулся, - это когда у меня есть multi-select (например, состояния), он хранит только одну из записей, потому что ключ получен. Мне нужен тип коллекции, который позволит мне иметь примерно следующее:ASP.NET, какой тип коллекции следует использовать?

Name => Bob 
State => Alaska 
State => Oregon 
State => Washington 
Company => Acme 

Какую коллекцию я должен использовать?

EDIT: ==============================

Я не уверен, что комментарии пока будет Помогите. Позвольте мне объяснить немного дальше. Этот класс поиска будет использоваться для сохранения параметров для любого поиска на моем сайте. Различные поисковые запросы могут иметь или не иметь одинаковые параметры. Когда этот метод сохранения классов называется поиском, он будет сбрасываться в базу данных. В таблице Searches будет создана одна запись, и в таблице SearchesParameters будет создано столько записей, сколько элементов в коллекции. Таблица SearchesParamaters содержит эти столбцы (ID, search_ID, ключ, значение).

База данных может заботиться о ней, если есть два параметра с ключом «Состояние». Чтобы мой класс был достаточно общим для всех поисков без необходимости обновления, я хочу иметь коллекцию/массив, который позволит мне иметь пары ключ/значение, а также позволить мне иметь несколько экземпляров одного и того же ключа. На самом деле я просто хочу, чтобы иметь возможность вызвать searchObj.addParameter (KEY, VALUE); Как класс обрабатывает то, что на задней части в основном не имеет значения, пока я могу надежно получить правильные ключи в паре с правильными значениями.

Является ли сборником способ пойти с этим или я должен рассматривать что-то вроде двух массивов, хранящих ключи и сохраняющих значения?

ответ

1

Словарь, который отображает строку в List<string>. Что-то вроде Dictionary<string, List<string>>.

Если в словаре нет элемента, создайте новый список для ключа и добавьте его. В противном случае просто добавьте новое значение в существующий список.

+0

Это избыток для полей Name и Company, где есть только один. –

1

Создайте класс и сохраните этот класс в коллекции.

class Search 
{ 
    public string Name { get; set; } 
    public List<string> State { get; set; } 
    public string Company { get; set; } 
} 

Тогда вы можете иметь несколько состояний для каждого поиска. Добавьте экземпляры этого списка в список и откройте его.

+0

Хм, кажется, я неправильно понял. Различают ли каждый из этих значений поисковые запросы? Или это один единственный поиск? –

+0

Его единственный поиск, но позволяет говорить при поиске. Я ищу (имя = bob, state = Oregon, state = washington). Я искал имя и два состояния (multi-select). В базе данных легко, три записи в таблице FK. Теперь в поиске B (возможно другая форма) Я ищу (State = Oregon, Company = Apex) На этот раз две записи в таблице FK. Из-за неопределенного количества параметров мне нужна действительно общая коллекция, которая имеет только некоторые комбинации ключевых значений и возможность иметь более одного элемента с одним и тем же ключом. – William

+0

Если вы хотите, чтобы набирать текст, я бы пошел на то, что уже предложили другие, словарь >. –

1

Что относительно общего списка (System.Collections.Generic)?

например,

string name; 
List<string> states; 
string company; 

Вы можете прочитать о родовых списках here

1

Вы должны использовать List<KeyValuePair<string, string>>

0

Я хотел бы использовать Dictionary<string, HashSet<string>>.

Смежные вопросы