2013-09-01 78 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 

結束命名空間

`

+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

查詢有一個anonymous type(因爲你指定了多個可供選擇的值),而不是

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預期的值類型,它似乎是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 

我相信上面的代碼,使競賽的內存副本並將其返回,公開爲MemoryDataSource。根據AddRange的語義是什麼,可以避免ToList

+0

謝謝Strilanc解決了這個問題......但是當我使用這個沒有查詢的結果從數據庫相同的時候什麼都沒有返回,雖然這種方式實際上可以與c#語言一起工作:請提供任何建議! ! –