EF 4.1 / Linq-to-SQL: что лучше: использовать Equals или ==? - PullRequest
3 голосов
/ 12 ноября 2011

Мы обсуждаем использование Equals или == для сравнения int в запросе LINQ. Сначала мы используем код EF4.1. Что лучше?

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

или

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

И Почему ?

Ответы [ 2 ]

9 голосов
/ 12 ноября 2011

Для Linq To Sql вы не хотите ни того, ни другого. Вместо этого используйте Object.Equals: .Where(b => Object.Equals(b.BoodschapID, id)

Почему? Из-за ошибки в генераторе SQL, если id является обнуляемым уникальным идентификатором. Если при использовании b.BoodschapID.Equals (id) или b.BoodschapID == id и b.BoodschapID получен обнуляемый Guid, сгенерированный SQL будет не WHERE BoodschapID IS NULL, а скорее WHERE BoodschapID = @p0, который не вернет никаких результатов. 1006 *

Я точно знаю, что EF имел ту же ошибку. Не знаю, решено ли это еще. Вы можете найти более подробную информацию в этом вопросе , просто имейте в виду, что некоторые ответы порождают ужасающий SQL.

Кроме того, нет никакой разницы между Equals и == в Linq To SQL, о которых я знаю.

0 голосов
/ 12 ноября 2011

Я предпочитаю первое.Он также работает со свойствами Nullable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...