2017-10-30 3 views
0

をゼロに参加LinqToEntityは、我々は2つのテーブルを持っているint型、文字列のチェックが

SELECT a.Title as ATitle,b.Title as BTitle FROM TableA a INNER JOIN TableB b ON CAST(a.ID as varchar(36))=b.RelatedObjectID 

ここでは、LINQのを使用して、それを書いた方法は次のとおりです。

from a in TableA 
join b in TableB on a.ID.ToString() equals b.RelatedObjectID 

そしてここでは、私たちが得たものです:

SELECT a.Title as ATitle,b.Title as BTitle FROM TableA a INNER JOIN TableB b ON CAST(a.ID as varchar(36))=b.RelatedObjectID OR (a.ID IS NULL AND b.RelatedObjectID IS NULL) 

TableAに多数のレコードがある場合、クエリの実行が非常に遅くなります。

何が起こっているのか、なぜnull値をチェックしているのか理解できません。

+0

パフォーマンスの点で問題がある場合は、これを作成することをお勧めします。次に、達成したい正確なクエリを作成します。 – Valkyrie

+5

使用しているエンティティフレームワークのバージョンは何ですか?それがEF 6ならば、 'ctx.Configuration.UseDatabaseNullSemantics = true;'を設定してみてください。 'ctx'はあなたのEFコンテキストインスタンスです。 – Evk

+0

@Valkyriee実行時に構築されるクエリであるため、ストアドプロシージャを作成することはできません。 – Beatles1692

答えて

0

linq-to-SQLは意図したSQL文とは異なるので、文全体を文字列として宣言し、C#経由でdbに対してクエリを実行するのはなぜですか?

関連する問題