LINQ к SQL и Пустым строкам, как, я использую, Содержит?

Многие команды, будь то команды git или обычные программы, выполняют действия в одну строку, которые вы могли бы сделать в десять раз. Всегда хорошо экономить работу!

Тем не менее, ваши шаги близки, но не полностью совпадают с тем, что делает git clone. Я могу представить себе несколько различий, связанных только с ветвями:

  • Если по какой-то причине HEAD пульта дистанционного управления не является мастером, клон выполнит Правильно - дать вам ветку, названную так же, как у пульта, а не у мастера. Это редкая, но хорошая деталь, о которой стоит знать.

  • Ваш git pull не будет создавать никаких удаленных веток. Если у удаленного есть несколько веток, клон создает удаленные ветви remotes/origin/foo, remotes/origin/bar, ... в вашем хранилище. git fetch origin позаботится об этом в перечисленных вами шагах.

  • Вы также не настроили свою основную ветвь для отслеживания происхождения, что делает клон. Вы можете добавить это к перечисленным шагам как git config branch.master.remote origin; git config branch.master.merge refs/heads/master. Это очень важно - с вашими шагами, если вы проверили master и набрали git pull, он не будет знать, что делать.

Возможно, я пропустил одну или две вещи. Что касается трудностей, так или иначе, даже если предположить, что вы сгладите все различия между клоном по умолчанию и «ручным клоном», я бы посоветовал не изобретать заново git clone:

  • Это коротко. Зачем работать больше?

  • У него есть удобные опции для изменения его поведения. Такие вещи, как --shared, было бы очень трудно добавить к перечисленным командам.

  • Это гарантированно делать правильные вещи сейчас и в будущем. Что делать, если вы пропустили детали, как те, что выше? Что если git добавил глобальный параметр конфигурации, влияющий на клонов? Вы должны изменить свои команды, чтобы учесть это, но git clone уже знал бы.

  • [1 125]
25
задан Oakcool 10 June 2009 в 17:49
поделиться

8 ответов

Самый очевидный:

from a in this._addresses
where (a.Street != null && a.Street.Contains(street)) || (a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional))
select a).ToList<Address>()

В качестве альтернативы вы можете написать метод расширения для Contains, который принимает нулевой аргумент без ошибок. Кто-то может сказать, что иметь такой метод не очень красиво, потому что он выглядит как обычный вызов метода,

43
ответ дан 28 November 2019 в 17:41
поделиться

Я бы использовал оператор объединения с нулем ...

(from a in this._addresses
where (a.Street ?? "").Contains(street) || (a.StreetAdditional ?? "").Contains(streetAdditional)
select a).ToList<Address>()
48
ответ дан 28 November 2019 в 17:41
поделиться

Вы должны сначала проверить, является ли StreetAdditional null .

Попробуйте

where a.Street.Contains(street) || ((a != null) && a.StreetAdditional.Contains(streetAdditional))

Это работает, потому что && является оператор быстрого доступа , и если a! = Null дает false, второе выражение со значением null не будет оцениваться, так как результат будет ] в любом случае ложно .

4
ответ дан 28 November 2019 в 17:41
поделиться

Я не думаю, что SqlServer выдал вам нулевое исключение. Если это так, то этот код явно не работает, хотя LinqToSql (как вы отметили вопрос).

string.Contains будет преобразовано в sql , например , у которого нет никаких проблем с null значения.

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

Я бы создал метод расширения, чтобы вернуть пустую последовательность, если null, а затем вызвать метод, содержащий метод.

public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> pSeq)
{
      return pSeq ?? Enumerable.Empty<T>();
}

from a in this._addresses
where a.Street.Contains(street) || 
      a.StreetAdditional.EmptyIfNull().Contains(streetAdditional)
select a).ToList<Address>()
4
ответ дан 28 November 2019 в 17:41
поделиться

Убедитесь, что свойства не равны нулю.

from a in this._addresses
where (a.Street != null && a.Street.Contains(street)) || 
(a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional))
select a).ToList<Address>()

Если проверка нуля ложна, то второе предложение после && не будет оцениваться.

1
ответ дан 28 November 2019 в 17:41
поделиться
from a in this._addresses
where a.Street.Contains(street) || (a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
1
ответ дан 28 November 2019 в 17:41
поделиться

Вы можете проверить, что переменные street и streetAdditional не равны нулю. Я столкнулся с той же проблемой, и установка для них пустой строки, похоже, решила мою проблему.

street = street ?? "";
streetAdditional = streetAdditional ?? "";
from a in this._addresses
where a.Street.Contains(street) || a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
1
ответ дан 28 November 2019 в 17:41
поделиться
Другие вопросы по тегам:

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