Ввести столбец в varbinary (max), который Linq to SQL может дескриптор. Один из способов избежать этого в каждом запросе - просто добавить вычисленный столбец, определенный как CAST(GeographyColumn AS varbinary(max))
.
После того, как у вас есть данные byte[]
, вы можете написать короткий Служебный метод для преобразования его в фактический Microsoft.SqlServer.Types.SqlGeography
класса с использованием MemoryStream
и IBinarySerialize
. Read
/Write
методов.
Насколько я знаю, это единственное работающее решение, если вам нужно работать с любым типом CLR, включая географию, геометрию, иерархию и любые пользовательские типы. Linq не поддерживает «изначально» ни один из них. Это немного боль, чтобы написать весь шаблонный код, но вы можете упростить его с помощью нескольких методов расширения.
Вы не сможете запросить колонку таким образом; однако вы можете получить то, что я бы назвал наполовину, используя Linq Dynamic Query Library. У вас не будет intellisense или некоторых других фишек Linq, но он по-прежнему является составным и поэтому лучше, чем ручной поиск каждого запроса, и вы можете получить сильные результаты.
Обновление: Я нашел немного более чистое решение here. Вы можете использовать конструктор таким образом; просто добавьте свойство обертки в частичный класс и используйте метод STGeomFromWKB
с классом SqlBytes
. Тем не менее это все равно не даст вам возможности встроенного запроса.
Хорошо, но это ничего не поможет, чтобы помочь мне запустить пространственные запросы, не так ли? Я имею в виду, мне все равно придется создавать свои собственные запросы, если я хочу, чтобы делал подобные 'SELECT X WHERE Y.STIntersects (X)' –
Да, вы, к сожалению, даже если бы был лучший способ уговорить Linq к SQL, чтобы принять тип CLR в качестве столбца, он все равно не знал, как сопоставить свои методы с вызовами функций SQL. Лучше всего писать эти запросы как SP или UDF в самом SQL Server, но если вы абсолютно должны написать свой SQL в приложении, то вы сможете получить то, что хотите, используя Linq Dynamic Query Library. – Aaronaught
Я обновил ответ ссылкой, если вы не знакомы с DynamicQuery. – Aaronaught