Список <> объектов, разных типов, сортировать и извлекать типы индивидуально? - PullRequest
0 голосов
/ 27 июня 2011

У меня есть несколько продуктов, любые, все или ни один из которых может быть связан с конкретной отправкой.Все 7 товаров являются подклассами класса Product.Мне нужно сохранить все продукты, связанные с отправкой, а затем извлечь их и их полевые данные на моем уровне представления.Я использую List<Product> и List<object>, но когда я использую OfType<EPL(specific subclass)>, я выдаю сообщение о том, что не могу неявно преобразовать systems.generic.IEnumerable<EPL> в тип «Product».Я пытался сыграть, но безрезультатно.

Когда я использую prodlist.OfType<EPL>();, ошибок нет, но когда я пытаюсь сохранить их в экземпляре EPL "tempEpl", я получаю вышеупомянутую ошибку, связанную с приведением типов.Что дает?Код ниже.

 ProductService pserv = new ProductService();
    IList<object> prodlist = pserv.getProductById(x);

    EPL tempEpl = new EPL();

    if ((prodlist.OfType<EPL>()) != null)
    {            
       tempEpl = prodlist.OfType<EPL>();  // this throws a conversion error. 

    }

Уровень данных

List<object> TempProdList = new List<object>();

    conn.Open();

    SqlCommand EplCmd = new SqlCommand(EPLQuery, conn);
    SqlDataReader EplRead = null;
    EplRead = EplCmd.ExecuteReader();

    EPL TempEpl = new EPL();
    if (EplRead.Read()) 
    {

        TempEpl.Entity1 = EplRead.GetString(0);
        TempEpl.Employees1 = EplRead.GetInt32(1);
        TempEpl.CA1 = EplRead.GetInt32(2);
        TempEpl.MI1 = EplRead.GetInt32(3);
        TempEpl.NY1 = EplRead.GetInt32(4);
        TempEpl.NJ1 = EplRead.GetInt32(5);
        TempEpl.PrimEx1 = EplRead.GetInt32(6);
        TempEpl.EplLim1 = EplRead.GetInt32(7);
        TempEpl.EplSir1 = EplRead.GetInt32(8);
        TempEpl.Premium1 = EplRead.GetInt32(9);
        TempEpl.Wage1 = EplRead.GetInt32(10);
        TempEpl.Sublim1 = EplRead.GetInt32(11);

        TempProdList.Add(TempEpl);
    }

Ответы [ 2 ]

8 голосов
/ 27 июня 2011

Этот код не имеет смысла:

Product tempEpl = new EPL();

if ((prodlist.OfType<EPL>()) != null)
{            
   prodlist.OfType<EPL>();
}
  • Неясно, почему вы создаете новый EPL() для начала с
  • OfType() никогда не вернет ноль -он возвращает последовательность, которая может быть пустой
  • Вызов OfType() сам по себе ничего полезного не сделает, в соответствии с текстом вашего if оператора

Это важночтобы понять, что OfType() возвращает последовательность, а не один элемент.Я подозреваю, что это то, что вы пропустили раньше.

Я подозреваю, что вы хотите:

Product tempEpl = prodList.OfType<EPL>().FirstOrDefault();

Это присвоит значение от null до tempEpl, если нет элементов типа EPL in prodList или первый элемент EPL в списке в противном случае.

(Непонятно, почему вы возвращаете List<object> со слоя данных для начала. Почему не List<Product>?)

3 голосов
/ 27 июня 2011

Я думаю, что в DAL вместо возврата списка типа Object вы должны вернуть список типа Product.Если вы сделаете это, то нет необходимости снова приводить его к типу Product.

Второе, в PL, вместо использования IList, просто используйте List.

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