Linq where column == (null reference) not the same as column == null

Change where (s.crmc_Retail_Trade_Id == tradeId)
to

where (s.crmc_Retail_Trade_Id == tradeId || 
      (tradeId == null && s.crmc_Retail_Trade_Id == null))

Edit – based on this post by Brant Lamborn, it looks like the following would do what you want:

where (object.Equals(s.crmc_Retail_Trade_Id, tradeId))

The Null Semantics (LINQ to SQL) MSDN page links to some interesting info:

LINQ to SQL does not impose C# null or
Visual Basic nothing comparison
semantics on SQL. Comparison operators
are syntactically translated to their
SQL equivalents. The semantics reflect
SQL semantics as defined by server or
connection settings. Two null values
are considered unequal under default
SQL Server settings (although you can
change the settings to change the
semantics). Regardless, LINQ to SQL
does not consider server settings in
query translation.

A comparison with the literal null
(nothing) is translated to the
appropriate SQL version (is null or is
not null).

The value of null (nothing) in
collation is defined by SQL Server;
LINQ to SQL does not change the
collation.

Leave a Comment