Login
Две таблицы...
NEW 08.06.15 15:16
Дано - две таблицы <DataTable> АА & BB - заполняемые из физически разных оракловских баз...
Как проще всего написать эквивалент <SELECT * FROM AA A WHERE A.NO IN (SELECT NO FROM BB B)>
в С#?
Пока Я их предварительно отсортировал с делал все в один проход - все быстро, но читать тяжело.
Хочется чтобы было так же быстро, но выглядело по-проще...
Как проще всего написать эквивалент <SELECT * FROM AA A WHERE A.NO IN (SELECT NO FROM BB B)>
в С#?
Пока Я их предварительно отсортировал с делал все в один проход - все быстро, но читать тяжело.
Хочется чтобы было так же быстро, но выглядело по-проще...
NEW 08.06.15 16:08
in Antwort Murr 08.06.15 15:16
NEW 08.06.15 17:58
in Antwort NightWatch 08.06.15 16:08
NEW 08.06.15 23:58
Вам красиво или быстро
Вообще то можно и самому Linq провайдер сделать.
Хотя на прошлом проекте все Linq запросы выбросили, надоело сравнивать с оптимальным кодом.
in Antwort Murr 08.06.15 17:58
В ответ на:
Это красиво, но будет много медленнее
Это красиво, но будет много медленнее
Вам красиво или быстро
Вообще то можно и самому Linq провайдер сделать.
Хотя на прошлом проекте все Linq запросы выбросили, надоело сравнивать с оптимальным кодом.
NEW 09.06.15 11:20
in Antwort Murr 08.06.15 17:58
NEW 09.06.15 11:57
in Antwort web-programmist 09.06.15 11:20
А кто мешает сделать запрос и функцию чтения "пачками" ? (limit..)
-----
Не понял вопроса. Поясни что имелось в виду.
-----
Не понял вопроса. Поясни что имелось в виду.
NEW 12.06.15 13:03
in Antwort NightWatch 08.06.15 16:08
Попробовал;
var query = from current in pCurrent.Rows.Cast<Rows.UnfinishedOrders>()
join delivery in deliveryStatus.Cast<Rows.DeliveryStatus>() on current.OrderNo equals delivery.OrderNo
select current;
int count = query.Count();
Unable to cast - - of type 'System.Data.DataRow' to type 'UnfinishedOrders'.
При этом <public static implicit operator UnfinishedOrders(DataRow)> - имеется.
<LINQ> - хорошо, но надо регулярно пользоваться... забыл уже детали...
Эээ... этот кусок сейчас получается одним из тормозов - выборка из базы делается быстрее, чем двойной цикл с проверкой совпадений...
Придется делать некрасивый и малопонятный код прохождения двух сортированных таблиц... ![]()
NEW 12.06.15 13:09
in Antwort Murr 12.06.15 13:03
Поправил на:
var query = from current in pCurrent.Rows.Cast<DataRow>()
join delivery in deliveryStatus.Cast<Rows.DeliveryStatus>() on current["orderNo"] equals delivery.OrderNo
select current;
и получил ноль отобранных на выходе...
Правда, надо признать, ноль был получен почти мгновенно... ![]()
NEW 12.06.15 15:15
explicit должен быть.
in Antwort Murr 12.06.15 13:03
В ответ на:
При этом <public static implicit operator UnfinishedOrders(DataRow)> - имеется.
При этом <public static implicit operator UnfinishedOrders(DataRow)> - имеется.
explicit должен быть.
NEW 12.06.15 15:18
in Antwort Murr 12.06.15 13:09
NEW 12.06.15 15:30
in Antwort NightWatch 12.06.15 15:15
NEW 12.06.15 15:33
in Antwort NightWatch 12.06.15 15:18
Или <int> и <int>
Или <decimal> и <decimal>
Есть, конечно шанс на <int> и <decimal>, но маловероятно...
Собственно, для отсутствия данных проблем и писались <Rows.Сomething>.
Или <decimal> и <decimal>
Есть, конечно шанс на <int> и <decimal>, но маловероятно...
Собственно, для отсутствия данных проблем и писались <Rows.Сomething>.
NEW 12.06.15 15:59
in Antwort NightWatch 12.06.15 15:34
А может и нет - надо смотреть как они там кастинг имплементировали - может именно <explicit> нужен.
NEW 12.06.15 16:23
in Antwort Murr 12.06.15 13:03, Zuletzt geändert 12.06.15 17:25 (NightWatch)
Э-э-э, тут дело в раннем связывании. Методы преобразования типов должны быть известны и связываются во время компиляции. Так что Enumerable.Cast "не знает" о существовании пользовательского метода преобразования.
Обходится либо так, как ты сделал, либо
Обходится либо так, как ты сделал, либо
pCurrent.Rows.Cast<DataRow>().Select(r => (Rows.UnfinishedOrders)r)
наверное экономичнее будет приведение в селектор ключа запихнуть:
var query = from current in pCurrent.Rows.Cast<DataRow>()
join delivery in deliveryStatus.Cast<Rows.DeliveryStatus>() on ((Rows.UnfinishedOrders)current).OrderNo equals delivery.OrderNo
select current;
12.06.15 16:43
in Antwort Murr 12.06.15 15:33, Zuletzt geändert 12.06.15 16:43 (NightWatch)
В ответ на:
Или <int> и <int>
Или <decimal> и <decimal>
Есть, конечно шанс на <int> и <decimal>, но маловероятно...
Отчего такая неопределенность? А может там тогда вообще string или Point?Или <int> и <int>
Или <decimal> и <decimal>
Есть, конечно шанс на <int> и <decimal>, но маловероятно...
NEW 12.06.15 16:49
in Antwort Murr 12.06.15 15:59
В ответ на:
А может и нет - надо смотреть как они там кастинг имплементировали - может именно <explicit> нужен.
Не. Если есть implicit operator, то и явное и неявное преобразование работает. Explicit operator разрешает только явное преобразование.А может и нет - надо смотреть как они там кастинг имплементировали - может именно <explicit> нужен.
NEW 12.06.15 17:10
in Antwort NightWatch 12.06.15 16:23
Чуток зверею...
<LINQ> - 0:00.55 sec
двойной цикл - 1:32.84
остался сложный вопрос - запихнуть результат <Select>а в <DataTable>
<LINQ> - 0:00.55 sec
двойной цикл - 1:32.84
остался сложный вопрос - запихнуть результат <Select>а в <DataTable>
NEW 12.06.15 17:13
in Antwort NightWatch 12.06.15 16:43
Отчего такая неопределенность?
-----
От того, что запрос к базе возвращает что-то... по идее должно быть целое, но по факту - <decimal>.
<String>ом мучался предыдущий прогер с известным результатом.
-----
От того, что запрос к базе возвращает что-то... по идее должно быть целое, но по факту - <decimal>.
<String>ом мучался предыдущий прогер с известным результатом.



