A null object must matter - why?

I have the following LINQ query

from p in dc.Purchases
where invoiceNumber == null || p.InvNumber == invoiceNumber.Value
select p;

"invoiceNumber" is a value with a null int value - when it is null, the program returns "A Nullable object must have a value error." Why does this happen when he explicitly checks if this is the first? Is there any way around this?

Thank,

+5
source share
9 answers

I think something is wrong with your request. From the code you provided, I assume that it invoiceNumberis a local variable or parameter. If so, why are you even checking to see if there is any invoiceNumber == nullin your request? Such verification should be performed separately from the request:

if(invoiceNumber == null)
{
    return dc.Purchases; 
    // the query would evaluate to this because invoiceNumber == null will allways return true.
}
else
{
    return 
        from p in dc.Purchases 
        where p.InvNumber == invoiceNumber.Value
        select p;
}
+2
source

try the following:

from p in dc.Purchases
where invoiceNumber == null ||(invoiceNumber!=null && p.InvNumber == invoiceNumber.Value)
select p;
0

from p in dc.Purchases
where (invoiceNumber == null ? p.InvNumber == null : p.InvNumber == invoiceNumber.Value)
select p;
0

from p in dc.Purchases 
where (invoiceNumber ?? p.InvNumber) == p.InvNumber
select p;

, , invoiceNumber null ?

0

HasValue, , Nullable .

from p in dc.Purchases
where !invoiceNumber.HasValue || p.InvNumber == invoiceNumber.Value
select p;
0

, , p.InvNumber . .Value:

from p in dc.Purchases
where invoiceNumber == null || p.InvNumber == invoiceNumber
select p;
0

null. , .

.

1 -

 int ? invoiceNumber = null;
 var prods = from p in dc.Purchases 
             where p.InvNumber == invoiceNumber
             select p;

CASE 2-

 int ? invoiceNumber = 100;
 var prods = from p in dc.Purchases 
             where p.InvNumber == invoiceNumber
             select p;

linq .

0

nullable - ... , + a null, .

readonly 1) HasValue 2) Value

HasValue - boolean, true, . , HasValue, Value. u Value , null, .

, . invoiceNumber == null invoiceNumber.Value==null (not invoiceNumber)

where invoiceNumber.HasValue && p.InvNumber == invoiceNumber.Value 

0

Linq-to-Sql - ​​ where SQL, invoiceNumber.Value null.

, invoiceNumber == null || p.InvNumber == invoiceNumber.

, .

0

All Articles