Linq, где столбец == (нулевая ссылка) не то же как столбец == пустой указатель

Я столкнулся с довольно странной проблемой с linq-to-sql. В следующем примере,

var survey = (from s in dbContext.crmc_Surveys
                                   where (s.crmc_Retail_Trade_Id == tradeId) && (s.State_.Equals(state))
                                   select s).First();

Если tradeId является пустым, он не ведет себя, как будто я определил пустой указатель конкретно как это вместо этого,

var survey = (from s in dbContext.crmc_Surveys
                                   where (s.crmc_Retail_Trade_Id == null) && (s.State_.Equals(state))
                                   select s).First();

Который является моим желаемым поведением. На самом деле это ничего не возвращает, если оба значения не являются непустыми. Я не могу выяснить, как выполнить это за исключением нескольких различных запросов linq. Какие-либо идеи?

26
задан Boog 19 January 2010 в 22:11
поделиться

3 ответа

Изменить где (s.crmc_retail_trade_id == prabyid) К

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

Редактировать - на основе на основе Brant Lamborn, похоже, что следующее будет делать то, что вы хотите:

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

. NULL SEMANTICS (LINQ to SQL) MSDN Ссылки на некоторую интересную информацию:

LINQ для SQL не налагает C # NULL или Visual Basic Ничего сравнения семантика на SQL. Операторы сравнения синтаксически переведены на их Эквиваленты SQL. Семантика отражает SQL семантика, как определено сервером или Настройки соединения. Два нулевых значения считаются неравными по умолчанию Настройки SQL Server (хотя вы можете Измените настройки, чтобы изменить семантика). Независимо от того, linq к sql не учитывает настройки сервера в Перевод запросов.

Сравнение с литеральным нулевым (Ничто) переводится на Соответствующая версия SQL (NULL или ненулевой).

Значение NULL (ничего) в сопоставление определяется SQL Server; Linq к sql не меняет сопоставление.

33
ответ дан 28 November 2019 в 07:28
поделиться

Нет, сбор мусора не может гарантировать, что у приложения не закончится память. Это даже не гарантирует, что ваше приложение не будет исчерпано при наличии памяти. Если вы приближаетесь к исчерпанию памяти или выделяете много объектов, это может привести к трэшу GC, создав исключение из памяти. Программа также может исчерпать память, если она использовала всю физическую память (фактическую и виртуальную) или программа превышает максимальный объем памяти, разрешенный JVM (см. -Xmx).

-121--3431257-

Убедитесь:

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

второе условие проверяет, является ли переменная среды HTTPS ( на или выключен ) набор на , и фиксирует добавленные s , которые затем доступны с % 1 . Если он не совпадает, % 1 является пустым рядом.

-121--4594706-

Не уверен в этом, но я подозреваю, что когда linq-to-sql переводит это в запрос sql последовательности вы получаете немного другое выражение, указывающее null прямо так, что в какой-то пункт вы сравниваете NULL с собой, и NULL = NULL определяется как false.

2
ответ дан 28 November 2019 в 07:28
поделиться

Didnt столкнулся с большими проблемами WatIn через xUnit.net себя.

Вот список белья, который люди должны свободно редактировать и/или предлагать обновления:

  • Является ли процесс NUnit администратором? Является ли IE своим администратором нереста? обратитесь к Диспетчеру задач. (Не то, чтобы работать от имени администратора является панацеей - вы в идеале хотите избежать этого, но как способ устранения причин, чтобы это не сработало)
  • Работает ли через TestDriven.net, CodeRush или ReSharper помощь?
  • Вы [ссылались на соответствующие dlls в качестве способа получить] зависимые DLL, такие как shdocvvw.dll сидя рядом с вашей тестовой сборки]?
  • Вы пытались увидеть, если Fiddler показывает что-то тайм-аут?
  • Вы пытались просмотреть вручную, чтобы убедиться, что какие-либо диалоги безопасность диалоги например, иногда контекст теста может быть администратором, тогда как обычный профиль просмотра может не быть (зависит от браузера) - например, если вы проигнорировали предупреждение сертификата в одном контексте, но не в другом, это может вызвать проблему.

Один большой gotcha, который укусил меня wrt WatiN, - то, что после того, как несколько тысяч просьб на WS08 IE откажутся сотрудничать, пока вы не выйдете и на снова (см. один из моих нерешенных вопросов). Маршрут, по которому я пошел вниз (мне требовался отказоустойчивый мониторинг), состоял в том, чтобы использовать регистратор WatIN, а затем передать их в GroupAgingPack с запросом LINQ с ручной кодировкой GET/POST с помощью WebRequest, который работает достаточно хорошо, но, очевидно, не обрабатывает JavaScript, что явно делает его академическим для многих сценариев.

-121--4690944-

IMHO также важно, чтобы информация сеанса изменялась после успешного входа в систему. Сохранение сведений о сеансе в базе данных не выполняется из-за инъекций.

-121--3579475-

Я не знаком с Linq, однако в целом:

NULL представляет отсутствующее, неизвестное или неопределенное значение. Строго говоря, переменная не может равняться NULL ; языки низкого уровня, которые обеспечивают эту конструкцию, обычно делают это для удобства, потому что нет легкой альтернативы - на более высоком уровне обычно лучше полагаться на ISNULL , определено , или на какие-либо особенности вашего языка поставок.

Одна неопределенная переменная не равна другой неопределенной переменной (и то же самое относится к NULL = = NULL). Джо Селко имеет хороший пример написания запроса, чтобы найти всех людей, цвет волос которых соответствует цвету автомобиля, которым они управляют. Должен ли этот запрос соответствовать лысому, который ходит повсюду?

1
ответ дан 28 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: