我正在使用一个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
因此,在上述代码中,成员始终为空,因为 WHERE 子句包含 OrganisationId = NULL 而不是 OrganisationId IS NULL。
我以为我已经通过使用 Equals() 解决了这个问题,如下所示:
var member = memberRepository.GetSingleOrDefault(m => m.Email == email && m.OrganisationId.Equals(organisationId));
但是当 organizationId 不为空时,我得到另一个错误:
此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
解决这个问题的最优雅的方法是什么?