Снова LINQ
Снова LINQ
Имею код:
foreach (TNUM_KREIS.Row department in pNUM_KREIS){var range = from piece in this.Cast<Row>()where piece.OrderNo > department.StartNo && piece.OrderNo < department.FinishNoselect piece;foreach(Row row in range){row.Department = department.Department;}}
Код находится внутри класса представляющего таблицу т.е. имеющего итератор по строкам.
Требуется - прописать в каждую строку Департамент из списка pNUM_KREIS
Критерий - нахождение OrderNo в соответствующем диапазоне.
Вот что-то не выходит. Т.е. для ВСЕХ выдается один (или первый, или последний) Департамент.
Понимаю, что проблема связана с отложенностью вычислений ЛИНКа, но не вижу как решать.
Пните, плс, в нужном направлении.
П.С. Инет рыл - имплементации Беттвеен - нашел. Не нашел как завязать на два источника.
Отбой тревоги - нашел ошибку в бизнес объекте.
Пояснишь?
-----
Хммм... В ЛИНКе вычисление выражения происходит не в момент его определения, а в момент его использования.
Ну, соответственно, бывают непонятки - вроде как выражение определено при каких-то значениях параметров,
а вычисления происходят при совсем других - тех, которые были изменены между определением и использованием.
Думал что это как-то создавало проблему в моем случае.
Но все оказалось проще - в ноябре 2016 срочно переключили с этой задачи на что-то еще и бизнес-объект остался
недоделанным - два поля брались не оттуда откуда надо. Одно из них - ОрдерНо...
как это могло (бы) оказать влияние в твоем куске кода.
-----
Я думал, что могло.
Бо, оно всегда так когда работаешь с малознакомой областью - может - это, может - то.
Но баг был не там.
А результат бага был похож на то что вычисления делаются с одним и тем же значением.
Отсюда и предположение.
TNUM_KREIS.Row department; var range = from piece in this.Cast<Row>()where piece.OrderNo > department.StartNo && piece.OrderNo < department.FinishNoselect piece; foreach (TNUM_KREIS.Row d in pNUM_KREIS) {department = d;
foreach(Row row in range)
{
row.Department = department.Department;
}
}
Еще подробнее или уже разберешься?
Спасибо. Я, честно говоря, не знал, что это так обстоит. Думал, что это только в случае передачи функций в качестве аргументов методов. Но механизм тот же самый, и может как облегчить жизнь, так и испортить, если применить в неправильном месте.