Null,int?和EF 4.1的lambda表达式

时间:2012-06-11 23:03:06

标签: c#-4.0 entity-framework-4 lambda

我正在使用int? lambda表达式中的变量,但生成的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

因此,在上面的代码中,member总是为null,因为WHERE子句包含OrganisationId = NULL而不是OrganisationId IS NULL。

我认为我已经通过使用Equals()解决了这个问题,如下所示:

var member = memberRepository.GetSingleOrDefault(m => m.Email == email&& m.OrganisationId.Equals(organisationId));

但是当organisationId不为null时,我又得到了另一个错误:

  

仅支持基本类型(例如Int32,String和Guid')   在这种情况下。

解决这个问题最优雅的方法是什么?

1 个答案:

答案 0 :(得分: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

相关问题