какой тип возвращает мой объектный запрос? - PullRequest
1 голос
/ 12 июля 2010
Public Function List_category() As Myobj 
Dim query = From subcat In _dataContext.subcategories, _ 
cat In _dataContext.categories _ 
Where subcat.CategoryID = cat.CategoryID _
                Select New Myobj() With { _
                .SubcatId = subcat.SubCategoryID, _
                .SubcatName = subcat.SubCategoryName, _
                .CatId = cat.CategoryID, _
                .CatName = cat.CategoryName _
                }
return ?????????
End Function

Открытый класс Myobj

Private m_SubcatId As Integer
Private m_SubcatName As String
Private m_catId As Integer
Private m_catName As String

Public Property SubcatId() As Integer
    Get
        Return m_SubcatId
    End Get
    Private Set(ByVal value As Integer)
        m_SubcatId = value
    End Set
End Property

Public Property SubcatName() As String
    Get
        Return m_SubcatName
    End Get
    Private Set(ByVal value As String)
        m_SubcatName = value
    End Set
End Property

Public Property CatId() As Integer
    Get
        Return m_catId
    End Get
    Private Set(ByVal value As Integer)
        m_catId = value
    End Set
End Property

Public Property CatName() As String
    Get
        Return m_catName
    End Get
    Private Set(ByVal value As String)
        m_catName = value
    End Set
End Property

Конечный класс

не работает !!!!

Он говорит, что 'Set' аксессор свойства 'SubcatName'недоступен.

Ответы [ 2 ]

0 голосов
/ 13 июля 2010

Компилятор просто сообщает вам, что вы объявили Private Set для SubcatName, и все же ypou пытается присвоить ему значение после New Myobj ().

Для первого запуска вы можете объявить класс POD (простые старые данные - просто общедоступные данные, без методов или свойств), и как только вы увидите, что он запущен, вы можете настроить его, добавить методы и т. Д.

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

Также есть способ вернуть анонимный тип и привести его обратно к эквивалентному анонимному типу, объявленному на принимающей стороне. Должен перейти к C #, хотя: -)

Пример ( прочитайте статью ):

// Method that returns anonymous type as object
object ReturnAnonymous()
{
  return new { City="Prague", Name="Tomas" };
}

// Application entry-point
void Main()
{
  // Get instance of anonymous type with 'City' and 'Name' properties
  object o = ReturnAnonymous();

  // This call to 'Cast' method converts first parameter (object) to the
  // same type as the type of second parameter - which is in this case 
  // anonymous type with 'City' and 'Name' properties
  var typed = Cast(o, new { City="", Name="" });
  Console.WriteLine("Name={0}, City={1}", typed.Name, typed.City);
}

// Cast method - thanks to type inference when calling methods it 
// is possible to cast object to type without knowing the type name
T Cast<T>(object obj, T type)
{
  return (T)obj;
}
0 голосов
/ 12 июля 2010

Вы можете создать собственный тип и изменить свой select, чтобы создать экземпляр для возврата.Посмотрите здесь: Linq To Sql возврат из функции как IQueryable

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