0

ビューに表示するために結合した2つのテーブルを取得するのに本当に苦労しています(顧客テーブルから取得した顧客名と請求書テーブルからの請求ステータスを表示したいだけです-どちらもCustomerId主キーで結合されています)。私はこれを調査するのに何年も費やし、このビューのためだけに別のモデルを作成するという結論に達しましたが、次を試して使用するときにコントローラーで作成しました。

Function ShowAll() As ViewResult
    Dim BillQuery = From d In db.Bills
                    Join c In db.Customers On d.CustomerId Equals c.CustomerId
                    Select c.CustSurname, d.BillStatus

    Dim BillList As List(Of BillView) = BillQuery.ToList()

    Return View(BillList)
End Function

エラーが発生します:

タイプ 'System.Collections.Generic.List(Of )' の値を 'System.Collections.Generic.List(Of Laundry.BillView)' に変換できません

これが私の Bill および BillView モデルです。

Imports System.Data.Entity
Imports System.ComponentModel.DataAnnotations

Public Class Bill

    'Key
    Public Property BillId() As Integer

    'Others
    <Required()>
    <Display(Name:="Customer ID")>
    Public Property CustomerId() As String

    <Required()>
    <Display(Name:="Bill Status")>
    Public Property BillStatus() As String

End Class

Public Class BillView

    Public Property CustSurname() As String

    Public Property BillStatus() As String

End Class

そして顧客モデル:

Imports System.Data.Entity
Imports System.ComponentModel.DataAnnotations

Public Class Customer

'Key
Public Property CustomerId() As Integer

'Others
<Display(Name:="Group ID")>
Public Property GroupId() As Integer

<Required()>
<Display(Name:="Firstname")>
Public Property CustFirstname() As String

<Required()>
<Display(Name:="Surname")>
Public Property CustSurname() As String

<Display(Name:="Email")>
Public Property CustEmail() As String

<Display(Name:="Cellphone")>
Public Property CustCellphone() As String

<Display(Name:="Address")>
Public Property CustAddress() As String

<Required()>
<Display(Name:="Status")>
Public Property CustStatus() As String

<Required()>
<Display(Name:="Account Balance")>
Public Property AccBalance() As Double

<Required()>
<Display(Name:="Loyalty Ammount")>
Public Property LoyaltyAmount() As Double

<Required()>
<Display(Name:="Customer Discount")>
Public Property PersonalDiscount() As Double


End Class
4

1 に答える 1

2

最初の LINQ クエリは、キャストできない匿名型を返しているようList(Of BillView)です。次のコードを試してBillView、キャスト前のモデルのコレクションを返します (追加された構文に注意してくださいSelect New BillView With {})。

Function ShowAll() As ViewResult
    Dim BillQuery = From d In db.Bills
                    Join c In db.Customers On d.CustomerId Equals c.CustomerId
                    Select New BillView With {.CustSurname = c.CustSurname, .BillStatus =  d.BillStatus}

    Dim BillList As List(Of BillView) = BillQuery.ToList()

    Return View(BillList)
End Function
于 2012-08-11T22:20:10.497 に答える