实体框架Linq等于value或为null

时间:2016-08-04 08:47:04

标签: c# entity-framework linq null

我正在尝试使用linq从视图中获取项目列表,其中字段LocationId是值或为null。字段LocationId是int?。

我正在尝试的代码是这样的:

var items = _context.Items.Where(
    d => d.LocationId == null || d.LocationId == query.Location).ToList();

不幸的是,正如SqlProfiler所见,生成的sql不包含d.LocationId == null。

与可能重复的问题的不同之处在于,只检查值的值为null。我想要的是SELECT * FROM Items WHERE LocationId = @some_param或LocationId IS NULL。

编辑:在映射不正确的评论后,我发现了问题。 映射类似于

HasKey(x => new { x.EquipmentId, x.LocationId});

因为这一切都来自一个观点。 看起来如果LINQ将属性视为键的一部分,它会认为它是不可为空的,如果属性可以为空则无关紧要(int?)

1 个答案:

答案 0 :(得分:1)

映射错误。从HasKey映射中删除了LocationId。

看起来如果LINQ将属性视为键的一部分,它会认为它是不可为空的,如果属性可以为空则无关紧要(int?)