Вернуть несколько списков из функции dal в asp.net vb.net - PullRequest
1 голос
/ 10 ноября 2009

Я изменил функцию, которая возвращает строго типизированный список продуктов (из формы веб-поиска) из хранимой процедуры.

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

Не смотря на то, что у меня закончились таланты, после прочтения сотен постов, кажется, это возможно с linq, но я бы предпочел не идти по этому пути, поскольку у меня там еще меньше знаний.

Можно ли поместить списки в какую-либо коллекцию и вернуть их для использования в качестве списка?

Если нет, то есть ли другой способ? Я могу снова вызвать хранимую процедуру, но это дорогой способ, чтобы вызвать дважды.

'Code Behind
Dim products As List(Of Product) = Dal.SearchProducts(st)

'Dal
Public Shared Function SearchProducts(ByVal searchstr As String) As List(Of Product)
Dim ProdList As List(Of Product) = New List(Of Product)()
Dim CatList As List(Of Category) = New List(Of Category)()

    ......
     Return Prodlist and Ilist please

Ответы [ 5 ]

2 голосов
/ 10 ноября 2009

Рассматривали ли вы просто возврат более грубого объекта, который просто содержит IList<Product> и IList<Category>?

public class ProductSearchDTO
{
    public IList<Product> {get; set;}
    public ILIst<Category> {get; set;}
}

Если вам абсолютно необходимо вернуть оба списка, это довольно легко реализовать.

0 голосов
/ 10 ноября 2009

Для полноты я хотел бы добавить, что вы можете «возвращать» значения, используя параметр ByRef:

'Code Behind
Dim products As List(Of Product)
Dim cats as List(Of Category)
Dal.SearchProducts(st, products, cats)

'Dal
Public Shared Sub SearchProducts(ByVal searchstr As String, _
                                 ByRef ProdList As List(Of Product), _
                                 ByRef CatList As List(Of Category))
    ProdList = New List(Of Product)()
    CatList = New List(Of Category)()

    ......
    ' No Return needed

Лично я предпочел бы вариант "пользовательский объект".

0 голосов
/ 10 ноября 2009

Функция может иметь только одно возвращаемое значение; однако, как предполагают Джош и Серхио, возвращаемое значение может быть своего рода объектом или структурой, содержащей несколько вещей. Альтернативой является возвращение значений через параметры в функцию, используя параметры ref или out. Например, вы можете указать, что два параметра функции являются ссылками на списки, в которых функция будет хранить товары и категории, которые она найдет; После завершения функции вы можете проверить эти списки на наличие данных.

0 голосов
/ 10 ноября 2009

Возможно, анонимный тип?

Должен признать, что это не та область, в которой я очень разбираюсь в VB ...

Martin.

0 голосов
/ 10 ноября 2009

Пользовательский объект с двумя списками в качестве свойств?

...