0

Visual Studio 2010 で記述された ASP.NET のリストに出力する LINQ ステートメントを取得する際に問題が発生しています。以下の関数は、データ ソース内の関連する DVD を検索しようとし、1 つのレコードを出力します。

 Public Function GetDVD(ByVal id As Integer) As DVDRaritiesDVDs _
    Implements IDVDDAO.GetDVD
    Dim DVD = From DVDList In _context.DVDRaritiesDVDs _
              Where DVDList.DVDID = id Select DVDList
    Return DVD.ToList().First()
End Function

しかし、私がそれに参加しようとすると:

 Public Function GetDVD(ByVal id As Integer) As DVDRaritiesDVDs _
    Implements IDVDDAO.GetDVD
    Dim DVD = From DVDList In _context.DVDRaritiesDVDs _
              Join Category In _context.DVDRaritiesCategories _
              On Category.CategoryID Equals DVDList.CategoryID _
              Where DVDList.DVDID = id Select DVDList, Category
    Return DVD.ToList().First()
End Function

コードをビルドすると、次のエラーが表示されます。

エラー 1 タイプ ' (23 行目)' の値を 'DVDRarities.Data.DVDRaritiesDVDs' に変換できません。C:\Users\a9010799\Projects\DVDRarities\DVDRarities.Data\DAO\DVDDAO.vb 24 16 DVDRarities.Data

誰かが私が間違っているところを指摘して、1つのステートメントでそれを行うことができますか?

4

2 に答える 2

0

クエリでは、DVDList インスタンスに対して {DVDList, Category} を返します。使用する必要があります

Public Function GetDVD(ByVal id As Integer) As DVDRaritiesDVDs _
    Implements IDVDDAO.GetDVD
    Dim DVD = From DVDList In _context.DVDRaritiesDVDs _
              Join Category In _context.DVDRaritiesCategories _
              On Category.CategoryID Equals DVDList.CategoryID _
              Where DVDList.DVDID = id Select DVDList
    Return DVD.First()
End Function

または、このメソッドの署名を変更する必要があります。

Public Function GetDVD(ByVal id As Integer) As Tuple(Of DVDRaritiesDVDs, DVDRaritiesCategories) _
        Implements IDVDDAO.GetDVD
        Dim DVD = From DVDList In _context.DVDRaritiesDVDs _
                  Join Category In _context.DVDRaritiesCategories _
                  On Category.CategoryID Equals DVDList.CategoryID _
                  Where DVDList.DVDID = id Select  New Tuple(Of DVDRaritiesDVDs, DVDRaritiesCategories)(DVDList, Category)
        Return DVD.First()
    End Function
于 2013-01-30T20:13:42.673 に答える
0

関数は DVDRaritiesDVDs オブジェクトを返します。明らかに、Linq クエリは (DVDRaritiesDVDs、DVDRaritiesCategories) のペアを含むリストを返します。

次の方法でコードを更新する必要があります。

 Public Class Pair
     Public First as DVDRaritiesDVDs
     Public Second as DVDRaritiesCategories
 End Class

 Public Function GetDVD(ByVal id As Integer) As DVDRaritiesDVDs _
    Implements IDVDDAO.GetDVD
    Dim DVD = (From DVDList In _context.DVDRaritiesDVDs _
              Join Category In _context.DVDRaritiesCategories _
              On Category.CategoryID Equals DVDList.CategoryID _
              Where DVDList.DVDID = id
              Select New Pair() With {First = DVDList, Second = Category})
    Return DVD.ToList().First()
End Function

当然、ジェネリックを使用してコードを一般化できますが、最も簡単に理解できるソリューションを提供することにしました。

于 2013-01-30T20:14:09.143 に答える