2013-09-01 4 views
-1

Что я пытаюсь сделать с этим кодом, это выбрать данные из моей базы данных и поместить запрос результатов в список, а затем добавить результаты в новый список, который я собираюсь использовать позже ... Но это дает мне ошибку:Список, листинг и IEnumerable вопросы


unable to cast object of type WhereSelectListIterator< jTableSampleDatabaseLayer.Hik.JTable.Models.Concour, VB$AnonymousType_0<string, int?, int?, DateTime, int, int, string, int?>> to type IEnumerable<jTableSampleDatabaseLayer.Hik.JTable.Models.Concour>


Imports System.Collections.Generic 
Imports System.Text 
Imports jTableSampleDatabaseLayer.Hik.JTable.Models 

Namespace Hik.JTable.Repositories.Memory 

    Public Class MemoryData 
     Dim x As jTableSampleDatabaseLayer.totofootEntities = New jTableSampleDatabaseLayer.totofootEntities 
     Public Function ListeConcours() As MemoryDataSource 
      Dim dataSource = New MemoryDataSource() 
      Dim liste As List(Of Concour) = x.Concours.ToList() 
      Dim ccrs = From concours In liste Select concours.numero_concours, concours.numero_type, concours.numero_nature, concours.date_de_sortie, concours.nbre_matchs, concours.nbre_rangs, concours.titre_concours, concours.numero_etape 

      dataSource.Concours.AddRange(ccrs) 
      Return dataSource 
     End Function 
    End Class 
End Namespace 

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

это класс memorydatasource:

`Imports System.Collections.Generic 

Импорт jTableSampleDatabaseLayer.Hik.JTable.Models

пространство имен Hik.JTable.Repositories.Memory

Public Class MemoryDataSource 

    Public Property Types As List(Of Type) 
    Public Property Concours As List(Of Concour) 
    Public Property Natures As List(Of Nature) 
    Public Property Etapes As List(Of Etape) 

    Public Sub New() 

     Types = New List(Of Type)() 
     Natures = New List(Of Nature)() 
     Etapes = New List(Of Etape)() 
     Concours = New List(Of Concour)() 

    End Sub 
End Class 

End Namespace

`

+4

форматирование не работает. –

+0

Что такое memorydatasource? Это ваш собственный класс? – AlwaysAProgrammer

+0

Я взял на себя смелость переформатировать объявления типа в сообщении об ошибке из «стандартного» синтаксиса в синтаксис C# для дженериков и использовать более короткие имена типов, это должно быть честно более читаемым для всех. (Было бы лучше использовать синтаксис VB.NET для них в этом вопросе, но я не знаком с VB.NET достаточно.) – millimoose

ответ

0

Предположим, вам нужно поместить выбранные результаты в новый объект типа Councur. После этого вы сможете добавить запрос к Councours список:

' pseudo code!!! 
Dim ccrs = From concours In liste 
      Select new Councur 
       Num = concours.numero_concours 
       Typ = concours.numero_type, 
       Nat = concours.numero_nature, 
       Dat = concours.date_de_sortie, 
       Mat = concours.nbre_matchs, 
       Ran = concours.nbre_rangs, 
       Con = concours.titre_concours, 
       Eta = concours.numero_etape 
0

Запрос,

From concours In liste 
Select concours.numero_concours, 
     concours.numero_type, 
     concours.numero_nature, 
     concours.date_de_sortie, 
     concours.nbre_matchs, 
     concours.nbre_rangs, 
     concours.titre_concours, 
     concours.numero_etape 

возвращает значения, которые имеют anonymous type (потому что вы указали более чем одно значение для выбора) вместо от типа значений, ожидаемых от dataSource.Concours.AddRange, который представляется Concour.

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

Dim x As jTableSampleDatabaseLayer.totofootEntities = New jTableSampleDatabaseLayer.totofootEntities 
Public Function ListeConcours() As MemoryDataSource 
    Dim dataSource = New MemoryDataSource() 
    Dim liste As List(Of Concour) = x.Concours.ToList() 

    dataSource.Concours.AddRange(liste) 
    Return dataSource 
End Function 

Я считаю, что приведенный выше код делает копию в памяти на Concours и возвращает его, разоблачен как MemoryDataSource. Возможно, можно избежать ToList, в зависимости от семантики AddRange.

+0

спасибо Strilanc, который решает проблему ... но когда я использую это без запроса, результаты от DB-sames не возвращают ничего, хотя этот способ действительно работает с языком C#: p любые предложения, пожалуйста !!! ! –

Смежные вопросы