EF 4.1 / Linq-to-SQL: Cosa è meglio: usare Equals o ==?

Stiamo discutendo sull’utilizzo di Equals o == su un confronto int in una query LINQ. Per prima cosa utilizziamo il codice EF4.1. Cos’è meglio?

 var query = context.Boodschappen .Where(b => b.BoodschapID == id).FirstOrDefault(); 

o:

 var query = context.Boodschappen .Where(b => b.BoodschapID.Equals(id)).FirstOrDefault(); 

E perché ?

Per Linq To Sql, non vuoi nessuno dei due. Utilizzare invece Object.Equals: .Where(b => Object.Equals(b.BoodschapID, id)

Perché? A causa di un bug nel generatore SQL se id è un identificatore univoco nullabile. Se si utilizza b.BoodschapID.Equals (id) o b.BoodschapID == id e b.BoodschapID sembra essere una guida nullable, l’SQL generato non sarà WHERE BoodschapID IS NULL ma piuttosto WHERE BoodschapID = @p0 che non restituirà alcun risultati.

So per certo che EF aveva lo stesso bug. Non ho idea se è ancora risolto. Puoi trovare maggiori dettagli in questa domanda , solo essere consapevoli del fatto che alcune delle risposte generano orrendi SQL.

A parte questo, non c’è differenza tra Equals e == in Linq To SQL di cui sono a conoscenza.

Preferisco il primo. Funziona anche su proprietà nullable.