Хранимая процедура LINQ возвращает значение в массив строк? - PullRequest
3 голосов
/ 24 марта 2011

У меня есть хранимая процедура в DBML, и я пытаюсь передать результат в «sqlQryArray» в виде массива (одномерный массив). Но нижний код вызывает ошибку, как показано ниже. Что еще нужно сделать?

Ошибка 1 Значение типа «1-мерный массив aaaDatabase.stp_GetSomethingResult» невозможно преобразовать в «1-мерный массив строк», поскольку «aaaDatabase.stp_GetSomethingResult» не является производным от «String».

Возвращаемым результатом хранимой процедуры является просто список имен студентов (только один столбец)

Dim sqlQry = aaaLINQ.stp_GetSomething(bbb,ccc,ddd)

Dim sqlQryArray As String() = sqlQry.ToArray()

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Результатом вашей хранимой процедуры, вероятно, является запись, которая напоминает что-то вроде этого (нотация POCO C #, я надеюсь, что вы можете прочитать ее):

 class Student {
     public string Name { get; set; }
 }

Итак, утверждение:

 sqlQry.ToArray()

возвращает массив объектов Student.Если вам нужно только имя, выберите имя из записи:

 sqlQuery.Select(student => student.Name).ToArray()

. Это вернет массив строк (содержащий имена учеников).

(Извините, все примеры в C #мои навыки VB плохо вводить код без intellisense).

2 голосов
/ 24 марта 2011

Некоторый фон
Как только результат хранимой процедуры был возвращен, он преобразуется в ISingleResult, который реализует IEnumerable, и возвращается вызывающему клиенту.Поскольку ISingleResult является универсальным классом, объект с тем же именем, что и sproc, создается с теми же свойствами, что и хранимая процедура.

При использовании хранимых процедур они могут возвращать только элементы типа ISingleResult или IMultipleResult.Это вызывает ряд проблем при использовании созданных объектов.Во-первых, в вашем клиентском коде вам придется вручную преобразовывать результат во что-то вроде ToList (), если вы хотите привязать объекты к источнику данных.Если вы преобразуете объекты в список, они не будут отслеживаться.Наконец, вы не можете извлечь выгоду из отложенной загрузки при использовании хранимых процедур, поскольку вызов базы данных выполняется при вызове метода.

Прочитайте полную статью здесь: http://blog.benhall.me.uk/2008/05/linq-to-sql-stored-procedure-vs.html

Проверьте это тоже: возможное решение, при котором вы немедленно переназначаете результат в собственное представление POCO.Вы также можете использовать запрос LINQ для управления вашим результатом:

LINQ to SQL: результаты хранимых процедур

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