2015-10-29 4 views
1

Я использую тип SqlGeography.STIntersred между типами SqlGeography в условии IF

Есть ли разница между следующими видами использования функции STIntersects:

this.Location.STIntersects(another.Location) 

и

this.Location.STIntersects(another.Location).Value 

и

this.Location.STIntersects(another.Location).Equals(1) 

?

Получаю разные результаты.

ответ

1

Проблема заключается в том, что метод SqlIntersects не возвращает логическое значение, она возвращает SqlBoolean структуру

Предполагая, что ваши географические пересекаются, я предполагаю, вы получите следующие значения:

this.Location.STIntersects (another.Location) => истинные

this.Location.STIntersects (another.Location) .Value => возвращает значение из proprerty SqlBoolean возвращаемого значения => истинно

this.Locat ion.STIntersects (other.Location) .Equals (1) => сравнивает структуру SqlBoolean со значением 1 и возвращает false

0

Мэтью Эванс дал полный ответ. Вот один и тот же ответ, сформулированный по-разному.

  • Location.STIntersects(another.Location) возвращает SqlBoolean с true в нем, если места пересечения в противном случае она возвращает false.
  • Location.STIntersects(another.Location).Value возвращает true или false тип System.Boolean, а не SqlBoolean выше.
  • Location.STIntersects(another.Location).Equals(1) возвращает «true if object is an instance of SqlBoolean and the two are equal; otherwise, false.». Следовательно, он всегда будет возвращать ложь так, как вы сравниваете.
+0

'общественная статическая область GetEnabledArea (база данных IDatabaseConnection, SqlGeography место) { возвращение database.GetData () .где (а => a.Enabled && a.Border.STIntersects (место нахождения) .equals (1)) .FirstOrDefault(); } 'дает мне свою разрешенную область, для которой« местоположение »пересекается ... Вот что я нахожу странным. – profou

+0

@profou: И что вы ожидаете возвращения? – displayName

+0

LINQ в этом методе должен возвращать первый или стандартный элемент 'database.GetData ()', который удовлетворяет условию 'a.Enabled && a.Border.STIntersects (location) .Equals (1)'. – displayName