Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Две таблицы...

614  1 2 все
NightWatch коренной житель12.06.15 17:33
NightWatch
NEW 12.06.15 17:33 
в ответ Murr 12.06.15 17:10
Ну, если результат селекта - IEnumerable<DataRow>, то в лоб напрашивается цикл, в котором импортируются строки: table.ImportRow(r);
#21 
Murr патриот12.06.15 17:40
Murr
NEW 12.06.15 17:40 
в ответ NightWatch 12.06.15 17:33
Насколько Я понимаю - результат <Select>а <IEnumerable<Rows.UnfinishedOrders>>
И дизайнено так, что бы до внутреннего <DataRow> добраться было сложно...
Хотя... может ну его, этот <DataTable>?
Что меня смущает - есть такая радость <CopyToDataTable()>
С <DataRow[ ]> - работает на раз... а вот с результатом <Select>а - полный облом.
#22 
NightWatch коренной житель12.06.15 17:44
NightWatch
NEW 12.06.15 17:44 
в ответ Murr 12.06.15 17:40, Последний раз изменено 12.06.15 17:44 (NightWatch)
Приведи актуальный запрос. Потому что результатом

var query = from current in pCurrent.Rows.Cast<DataRow>()
join delivery in deliveryStatus.Cast<Rows.DeliveryStatus>() on current["orderNo"] equals delivery.OrderNo
select current;


будет IEnumerable<DataRow>.

#23 
NightWatch коренной житель12.06.15 17:52
NightWatch
NEW 12.06.15 17:52 
в ответ Murr 12.06.15 17:40
В ответ на:
Что меня смущает - есть такая радость <CopyToDataTable()>
Тот же цикл, но с кучей проверок.
#24 
Murr патриот12.06.15 18:21
Murr
12.06.15 18:21 
в ответ NightWatch 12.06.15 17:44
будет IEnumerable<DataRow>.
-----
Да, но с пустым результатом.
Проблема - current["orderNo"] equals delivery.OrderNo - <decimal> <int>.
Актуальный код:
            var query1 = from current in pCurrent.Rows.Cast<DataRow>().Select(r => (Rows.UnfinishedOrders)r)
join delivery in deliveryStatus.Cast<Rows.DeliveryStatus>() on current.OrderNo equals delivery.OrderNo
where delivery.DeliveryStatusS == TDeliveryStatus.NotDelivered
select current;
var query2 = from current in pCurrent.Rows.Cast<DataRow>().Select(r => (Rows.UnfinishedOrders)r)
join delivery in deliveryStatus.Cast<Rows.DeliveryStatus>() on current.OrderNo equals delivery.OrderNo
where delivery.DeliveryStatusS == TDeliveryStatus.PartiallyDelivered
select current;
foreach (Rows.UnfinishedOrders row in query1)
{
row.DeliveryStatus = TDeliveryStatus.NotDelivered;
}
foreach (Rows.UnfinishedOrders row in query2)
{
row.DeliveryStatus = TDeliveryStatus.PartiallyDelivered;
}


дальше нужно слияние и перегонка в <DataTable>. Ну либо переработка (ее мне сейчас делать не хочется) остального кода.
Хммм... там, по имеющемуся коду, еще одно поле требует заполнения, но за все время Я не видел, чтобы значения отличались.

<--- nobody harmed in this action -->
#25 
NightWatch коренной житель12.06.15 18:31
NightWatch
NEW 12.06.15 18:31 
в ответ Murr 12.06.15 18:21
В ответ на:
Да, но с пустым результатом.
Проблема - current["orderNo"] equals delivery.OrderNo - <decimal> <int>.
(int)(decimal)current["orderNo"] equals delivery.OrderNo
#26 
Murr патриот15.06.15 13:52
Murr
NEW 15.06.15 13:52 
в ответ NightWatch 12.06.15 18:31
Это надо будет еще тестить.
Пока другая задница вылезла. Хитрая такая...
Если делать заполнение таблицы из какого-то стандартного источника - <DataReader> и Ко - то в <DataTable> помещаются данные и структура этих данных.
А вот если заполнять таблицу через <ImportRow()>, то структуры на месте не имеется...
Пошел искать где допустимо пользовать <Clone()>...
#27 
Murr патриот15.06.15 16:39
Murr
NEW 15.06.15 16:39 
в ответ Murr 15.06.15 13:52
Очередная веселая нособойка - статический конструктор С#-обьекта (<VS2012>) из <VB> <VS2010> - не вызывается...
Или есть какие-то настройки на совместимость?
#28 
1 2 все