0

したがって、私の状況では、テーブルの1つで日付をnullにできないlinq-to-sqlモデルがあります。データベースではそのフィールドにnullが許可されていないため、これは意図されたものです。私の問題は、このモデルでLinqクエリを作成しようとすると、日付が「null許容」フィールドではなく、「Nothing」と比較できないため、そのテーブルで左結合を実行できなくなることです。

例:Movieテーブル{ID、MovieTitle}とShowingsテーブル{ID、MovieID、ShowingTime、Location}があります

今、私は上映されていないすべての映画を返すステートメントを書き込もうとしています。T.SQLでは、これは次のようになります。

Select m.*
From Movies m Left Join Showings s On m.ID = s.MovieID
Where s.ShowingTime is Null

この状況では、「場所」フィールドでNullをテストできますが、これは実際にはありません(単純化された例です)。私が持っているのはnull以外の日付だけです。

私はLinqで書き込もうとしています:

From m In dbContext.Movies _
Group Join s In Showings on m.ID Equals s.MovieID into MovieShowings = Group _
From ms In MovieShowings.DefaultIfEmpty _
Where ms.ShowingTime is Nothing _
Select ms

しかし、私は次のようにエラーが発生しています

'Is'演算子は、タイプ'Date'のオペランドを受け入れません。オペランドは、参照型またはnull許容型である必要があります。

これを回避する方法はありますか?モデルは正しいです。Showings:ShowTimeテーブルにnullがあってはなりません。しかし、左参加を行い、特定の映画の上映時間がない場合、ShowTimeはその映画には何もないはずです...

皆さんの助けに感謝します。

4

2 に答える 2

2

左結合を使用しても、ここでは実際には役に立ちません。右側のテーブルには結果が表示されない可能性があるため、左側のテーブルだけを取得して左側のみを取得することもできます。これは単純な「存在しない」/「存在しない」クエリです。

From m in dbContext.Movies _
Where Not dbContext.Showings.Any(Function(s) s.MovieID = m.MovieID) _
Select m
于 2010-01-20T00:40:38.723 に答える
0

表示テーブルにレコードがない場合、クエリ内のオブジェクト全体は何もないはずです。このようなシナリオでは、日付が関係することはありません。左の結合はこのように書かれ、上映が欠落している映画のみを選択します

Dim query = From m In dbContext.Movies _
            Group Join s In dbContext.Showing On m.ID Equals s.MovieID Into g = Group _
            From item In g.DefaultIfEmpty() _
            Where item Is Nothing _
            Select m
于 2010-06-02T14:13:12.697 に答える