Как проверить нуль встроенного оператора linq to entity - PullRequest
0 голосов
/ 15 декабря 2010

Используя linq для сущностей, которые я подключаю к базе данных, в базе данных есть таблицы, в которых есть платежи, которые имеют взаимосвязь multi-multi с заданиями.Это достигается с помощью таблицы allocs.Мне нужен список со всеми заданиями, в котором есть столбец с указанием срока оплаты, который берет все распределения платежей за это задание и убирает его из цены задания.Однако, используя приведенный ниже оператор linq to entity.Проблема заключается в том, что если задание не имеет выделений, оно возвращает ноль и, следовательно, подлежащий оплате платеж пуст.Чего я действительно хочу, так это того, чтобы должная оплата была ценой работы, если нет выделений, однако, я не могу придумать способ обойти это.Пожалуйста, помогите, прежде чем я наконец сойду с ума: - (

           var jobs = from j in data.jobs
                   where j.property.customer.id == customerid
                   && j.completed != null
                   select new
                   {
                       j.id,
                       j.price,
                       dueprice = j.price - ( from a in data.allocs
                                              where a.job.id == j.id
                                              select a.amount ).Sum(),

                       lineone = j.property.lineone,
                       postcode = j.property.postcode,
                       jobtype = j.jobtype.name,
                       j.completed
                   };

Ответы [ 3 ]

0 голосов
/ 15 декабря 2010

Я на самом деле нашел ответ сам, я попробую Олег, так как он кажется немного более точным, но я подумал сделать это

                        dueprice = j.price - (( from a in data.allocs
                                              where a.job.id == j.id
                                              select a.amount ).Sum())==null ? j.price:
                                     //sets the due price to the normal sum if it has allocs
                                     j.price - ( from a in data.allocs
                                              where a.job.id == j.id
                                              select a.amount ).Sum(),

однако мне нравится идея только добавитьбольше строки кода вместо моих нескольких (плюс это повторный код) я попробую это и дам вам все знать.Спасибо за ответ.

0 голосов
/ 15 декабря 2010

Вы также можете использовать оператор Null Coalescing , чтобы упростить код, подобный этому:

         dueprice = j.price - (( from a in data.allocs 
                                          where a.job.id == j.id 
                                          select a.amount ).Sum() ?? 0)

Этот оператор возвращает первое значение, которое не равно нулю, поэтому myNum ?? 0 вернет myNum, если оно не равно нулю, и если оно равно нулю, оператор вернет 0.

0 голосов
/ 15 декабря 2010
select a.amount ).Concat(/* array with one zero element */).Sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...