Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Как присвоить массиву целых столбец БД с числами?


Автор: sedoy 18.3.2008, 16:11
Можно ли, если можно то как писвоить массиву целых чисел - столбец с таблицы базы данных,
 не производя почленного присваивания в цикле? По сути ведь столбец и есть массивом целых.

Я пытаюсь сделать это так:
int[] id = mydataset.Tables["Product"].Column[idProduct];

 но выдает естественно ошибку: Cannot implicitly convert type 'System.Data.DataColumn' to 'int[]'
Подскажите как это сделать правильно


Автор: Voyager 18.3.2008, 16:17
Нет, так не получится, нужен цикл (или как вариант использовать Linq в Framework 3.5).

Автор: sedoy 18.3.2008, 16:46
У меня .NET version:2.0 - в моем случае без цикла никак нельзя ?
В моей таблице с десяток строк, но если их будет очень много - это каждый раз прийдется обращаться к данным в столбце чтоб скопировать, из-за этого все начнет тормозить.

Автор: Voyager 18.3.2008, 18:12
Можно в принципе без явного цикла, как вариант:

Код

            DataRow[] Rows = new DataRow[mydataset.Tables["Product"].Rows.Count];
            mydataset.Tables["Product"].Rows.CopyTo(Rows, 0);
            int[] ID = Array.ConvertAll(Rows, new Converter<DataRow, int>(DataRowToInt));
        
        ...

        public static int DataRowToInt(DataRow Row)
        {
            return Convert.ToInt32(Row["ID"].ToString());
        }

Автор: marcusmae 23.3.2008, 19:11
sedoy, от цикла не уйти никак. С другой стороны, не всегда так уж необходим сразу весь массив int[], его можно создавать "на лету" по мере того, какие требуются элементы. На этот счёт в .NET существует пара концептуальных вещей - перечислители (IEnumerator) и yield return.

Автор: akizelokro 14.4.2008, 10:50
с запозданием предложу индексатор

Код

public int this(int index)
{
    get
    {
        return (int)mydataset.Tables["Product"].Row[index].Column[idProduct].Value;
    }
    set
    {
           mydataset.Tables["Product"].Row[index].Column[idProduct].Value = value;
     }
}


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)