私はintを使用していますか?ラムダ式の変数ですが、変数がnullの場合、生成されたSQLには「IS NULL」が含まれます。
EntityFramework 4.1 を使用する MVC プロジェクトにこのメソッドがあります。
public Member GetByEmailAndOrganisationId(string email, int? organisationId)
{
var member = memberRepository.GetSingleOrDefault(m => m.Email == email && m.OrganisationId == organisationId);
return member;
}
しかし、SQL-Profiler を使用すると、生成された WHERE 句が次のようになっていることがわかります。
WHERE ([Extent1].[Email] = @p__linq__0) AND ([Extent1].[OrganisationId] = @p__linq__1),
@p__linq__0 nvarchar(4000), @p__linq__1 int,
@p__linq__0=N'jf@beauchamp.me', @p__linq__1=NULL
したがって、WHERE 句に OrganizationId IS NULL ではなく OrganizationId = NULL が含まれているため、上記のコードでは member は常に null です。
次のように Equals() を使用して問題を解決したと思いました。
var member = memberRepository.GetSingleOrDefault(m => m.Email == メール && m.OrganisationId.Equals(organisationId));
しかし、organisationId が null でない場合、別のエラーが発生します。
このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。
これを解決する最もエレガントな方法は何ですか?