0

LLBLGen Pro、MVC 3、VB.NETを使用しています。Iqueryableのオブジェクトを返そうとしていますが、次の例外が発生します

タイプ'SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery1 1[Mail.DAL.EntityClasses.TblCostCentreEntity]' to type 'System.Linq.IQueryable[Mail.Model.CostCentre]'のオブジェクトをキャストできません。

LLBLGenProQueryとIQueryableの違いは何ですか?LLBLGenProを使用してIQueryableオブジェクトを返すにはどうすればよいですか?私のコードは次のとおりです。

 Public Function GetAllCostCentres() As IQueryable(Of Model.CostCentre) Implements ICostCentreRepository.GetAllCostCentres
        Mapper.CreateMap(Of TblCostCentreEntity, CostCentre)()
        Dim metaData As New LinqMetaData
        Dim q = From p In metaData.TblCostCentre _
                    Select Mapper.Map(Of IQueryable(Of CostCentre), TblCostCentreEntity)(p)


        'Dim t As IQueryable(Of CostCentre) = Mapper.Map(Of CostCentre)(q)
        'Select New CostCentre With {.Active = p.Active, .CostCentre = p.CostCentre, .CreatedBy = p.CreatedBy, .DateCreated = p.DateCreated, .DateLastModified = p.DateLastModified, .ModifiedBy = p.ModifiedBy, .CostCentreID = p.CostCentreId}

        Return q
    End Function
4

1 に答える 1

0

IQueryable

(http://llblgen.com/documentation/3.5/LLBLGen%20Pro%20RTF/hh_goto.htm#Using%20the%20generated%20code/Linq/gencode_linq_gettingstarted.htm#LinqMetaData)

これは、実行時にクエリ全体を表す Expression インスタンスのツリー、つまり Expression ツリーを作成するコードをコンパイラに生成させるクエリです。式ツリーは直接実行できません。式ツリー内で指定されたものを実行するには、解釈する必要があります。これは、Linq to LLBLGen Pro のような Linq プロバイダーが行うことです。式ツリーを受け入れ、それを理解できる要素に変換し、これらの要素を解釈し、このクエリの実行可能な形式を生成します。

ILLBLGenProQuery (http://llblgen.com/documentation/3.5/LLBLGen%20Pro%20RTF/hh_goto.htm#Using%20the%20generated%20code/Linq/gencode_linq_gettingstarted.htm#ILLBLGenProQuery)

LinqMetaData によって生成された IQueryable 要素で定義されたインターフェイス。このインターフェイスを使用すると、Execute メソッドを呼び出してクエリを実行できます。これの利点は、エンティティ コレクションなどのネイティブ コンテナでクエリ結果を取得できることです。もう 1 つの利点は、結果のリストを取得するために、プロバイダーが結果を完全にトラバースしてリスト内の結果をコピーする必要がないことです。返された結果は、最初に格納されたコンテナーに既に存在します。

于 2012-09-13T06:53:13.373 に答える