我正在使用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') 在这种情况下。
解决这个问题最优雅的方法是什么?
答案 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);