开发者

How to check the null of an embedded linq to entities statement

开发者 https://www.devze.com 2023-01-30 22:28 出处:网络
Using linq to entities i am connecting to a database, the database has tables in it that ha开发者_开发技巧s payments that have a multi to multi relationship with jobs. This is acheived via an allocs t

Using linq to entities i am connecting to a database, the database has tables in it that ha开发者_开发技巧s payments that have a multi to multi relationship with jobs. This is acheived via an allocs table. I want a list box with all the jobs that has a column called due price which takes all of the allocations of payments for this job and takes that away from the job price. However, using the below linq to entities statement. The problem is that if the job has no allocations it returns null and therefore the due payment is empty. What i really want is for the due payment to be the job price if there are no allocations however, i cannot think of a way around this. Please help before i finally go insane :-(

           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
                   };


You can also use the Null Coalescing operator to simplify code like this:

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

This operator returns the first value which is not null, so myNum ?? 0 will return myNum if it is not null, and if it is null the operator will return 0.


select a.amount ).Concat(/* array with one zero element */).Sum()


I actually found an answer my self, i will try oleg's as well as it seems to be a little more precise but i thought of doing this

                        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(),

however i like the idea of only adding on more line of code instead of my several(plus it's repeated code) i will try this and let you all know. Thanks for the response.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号