JOIN を使用した LINQ クエリ (VB.NET) で単一のエンティティ クラス (「カテゴリ」) を返そうとしていますが、機能していません。次のいずれかの理由だと思います。
- IEnumerable の結果セット (1 個中) を取得しています OR
結合の最初のテーブルの列だけではありません
この無効な型キャスト例外が発生するため:
Unable to cast object of type 'System.Data.Linq.DataQuery`1[category]'
to type 'category'.
これが私が望むことを行うSQLです(結合されたテーブルの列が必要ないことに注意してください):
select subcat.*
From category as cat
join category as parentcat On cat.cat_id = cat.parent_cat_id
Where parentcat.cat_url = 'dogs'
And cat.cat_url = 'poodles'
LINQPadで動作するLINQコードは次のとおりです。
dim q = From cat In categories _
Join parentcat In categories On parentcat.cat_id Equals cat.parent_cat_id _
Where parentcat.cat_url.ToLower = "dogs" _
And cat.cat_url.ToLower = "poodles" _
Select categories.SingleOrDefault(function(c) c.cat_id = cat.cat_id)
q.dumb
しかし、これは VB.NET の「CategoryRepository」関数では機能しません。
Public Function GetCategoryByURL(ByVal strCatURL As String, ByVal strSubCatURL As String) As category Implements ICategoryRepository.GetCategoryByURL
Return From cat In db.categories _
Join parentcat In db.categories On parentcat.cat_id Equals cat.parent_cat_id _
Where parentcat.cat_url.ToLower = strCatURL.ToLower _
And cat.cat_url.ToLower = strSubCatURL.ToLower _
Select db.categories.SingleOrDefault(Function(C) C.cat_id = cat.cat_id)
End Function
「カテゴリ」クラスの単一のインスタンスを返すようにするにはどうすればよいですか? (単一のインスタンスを返すこの同じ関数をオーバーロードしているため、そのようにする必要があります...そしてそれは機能します!) データベースが正しく、「プードル」カテゴリを返す必要があることを確認しました。
私はLINQを初めて使用するので、間違っていることが非常に明白であると確信しているので、助けていただければ幸いです!