0

私は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 など) のみがサポートされます。

これを解決する最もエレガントな方法は何ですか?

4

1 に答える 1

1

これでうまくいくと思います:

if(organisationId.HasValue)
    return memberRepository.GetSingleOrDefault(m => m.Email == email && m.OrganisationId == organisationId);
else
    return memberRepository.GetSingleOrDefault(m => m.Email == email && m.OrganisationId == null);

EF 4.5で修正されたようです: http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1015361-incorrect-handling-of-null-variables -in-where-cl?ref=title#suggestion-1015361

于 2012-06-12T04:58:02.657 に答える