列表,演员和IEnumerable问题

时间:2013-09-01 18:54:27

标签: .net vb.net

我正在尝试使用此代码来从我的数据库中选择数据信息并将结果查询放在列表中,然后将结果添加到我稍后将要使用的新列表中...但这给了我错误:


  

无法将WhereSelectListIterator< jTableSampleDatabaseLayer.Hik.JTable.Models.Concour, VB$AnonymousType_0<string, int?, int?, DateTime, int, int, string, int?>>类型的对象转换为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

结束命名空间

`

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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的语义。