Предпочтительный способ передать несколько объектов, все применяя один другой объект - PullRequest
0 голосов
/ 10 июня 2009

для проекта, над которым я сейчас работаю, я пытаюсь передать набор объектов, так или иначе связанных с одним объектом.

В настоящее время я потерял сознание и, похоже, не могу найти правильного решения.

Ситуация такая. У меня есть продуктовый объект, на который распространяется несколько страховых пакетов. Мне нужно передать эту информацию в представление, но я должен быть в состоянии получить надлежащие пакеты для соответствующих продуктов. так это выглядит так ...

Товар 1 имеет упаковку 1, 2, 3 Товар 2 имеет пакет 2,3,5,6 Товар 3 имеет упаковку 2,4,6,7

Проблема в том, что может быть разное количество товаров и разное количество упаковок

Есть идеи? Ответ, вероятно, прост, но я немного устал, чтобы это выяснить ...

Ответы [ 5 ]

5 голосов
/ 10 июня 2009

словарь списков?

Dictionary<Product, List<Package>> products = new Dictionary<Product, List<Package>>();
products.Add(product1, new List<Package>());
products.Add(product2, new List<Package>());
products.Add(product3, new List<Package>());
products[product1].Add(package1);
products[product1].Add(package2);
products[product2].Add(package2);
products[product2].Add(package3);
products[product2].Add(package5);
products[product2].Add(package6);
products[product3].Add(package2);
products[product3].Add(package4);
products[product3].Add(package6);
products[product3].Add(package7);

Я делаю это достаточно часто, я написал свой собственный контейнер IndexedLists<K,V>, который действительно Dictionary<K, List<V>>, который автоматически обрабатывает создание списков.

0 голосов
/ 10 июня 2009

Возможно, я неправильно понял вопрос, но если это просто вопрос передачи этих данных в представление, самым простым может быть создание метода, который принимает продукт в качестве одного параметра и набор пакетов в качестве другого параметра, что-то вроде :

public void SetProduct(Product product, IList<Package> packages)
{
   ...
}
0 голосов
/ 10 июня 2009

Как насчет этого:

  • Создайте контейнерный класс, как предложил Саймон
  • В классе есть следующие члены:
    • Список продуктов {get; задавать; }
    • Список пакетов {get; задавать; } * +1010 *
    • Список GetPackages (Продукт продукта);

Метод GetPackages может запрашивать внутренний словарь, чтобы определить, какие пакеты возвращать.

public class ProductsPackages
{
    private Dictionary<int, int> _map;

    public ProductsPackages(List<Product> products, List<Package> packages,
                            Dictionary<int, int> map)
    {
        _map = map;
    }

    public List<Product> Products { get; private set; }
    public List<Package> Packages { get; private set; }

    public List<Package> GetPackages(Product product)
    {
        return (from p in Packages
                join kvp in _map on p.ID == kvp.Value
                where kvp.Key == product.ID
                select p).ToList();
    }
}
0 голосов
/ 10 июня 2009

Я думаю, что нам нужно больше информации ... Связаны ли ваши объекты продукта и упаковки каким-либо образом? Если у объекта продукта есть список применимых пакетов, то вы просто передаете продукт на просмотр и идете дальше. Если нет, то как вы отслеживаете связь между вашими двумя типами объектов?

0 голосов
/ 10 июня 2009

По звуку вы должны обернуть объекты в какой-нибудь контейнерный объект. Конструктор объекта контейнера соберет все объекты, которые вы хотите сгруппировать, затем вы можете передать объект контейнера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...